Class: Bitcoin::Address

Inherits:
Object
  • Object
show all
Defined in:
lib/bc.rb

Overview

This class represents a Bitcoin address.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(bc, address) ⇒ Address

bc is a Bitcoin::Client instance. address is a (String) Bitcoin address that we have the private key for.



443
444
445
446
447
448
449
450
451
452
453
454
# File 'lib/bc.rb', line 443

def initialize(bc, address)
	@bc = bc
	@address = address

	unless @bc.is_a?(Bitcoin::Client)
		raise TypeError, "bc must be a Bitcoin::Client (#{@bc.class} given)"
	end

	unless valid?
		raise InvalidAddress, @address
	end
end

Instance Attribute Details

#addressObject (readonly)

This is our actual (String) Bitcoin address.



439
440
441
# File 'lib/bc.rb', line 439

def address
  @address
end

#bcObject (readonly)

This is the Bitcoin::Client instance we are connected to.



436
437
438
# File 'lib/bc.rb', line 436

def bc
  @bc
end

Instance Method Details

#accountObject

Get the Account we’re associated with.



489
490
491
# File 'lib/bc.rb', line 489

def 
	@bc.(@bc.jr.getaccount(@address))
end

#account=(account) ⇒ Object

Associate us with account, which can either be a String or an Account. Either way, we will return an Account.



495
496
497
498
# File 'lib/bc.rb', line 495

def account=()
	@bc.jr.setaccount(@address, .to_s)
	@bc.(.to_s)
end

#inspectObject

:nodoc:



531
532
533
# File 'lib/bc.rb', line 531

def inspect  # :nodoc:
	"#<Bitcoin::Address #{@address}>"
end

#private_keyObject

This is the (String) private key associated with this address. If this account’s address is invalid (or from the wrong bitcoin network), we raise InvalidAddress. If we don’t have the private key associated with this address (or our wallet is locked), we return nil.



472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
# File 'lib/bc.rb', line 472

def private_key
	begin
		@private_key ||= @bc.jr.dumpprivkey(@address)
	rescue Jr::ServerError => ex
		$ex = ex.code
		case ex.code
			when -5
				raise(InvalidAddress, @address)
			when -4
				nil
			else
				raise
		end
	end
end

#sign(msg) ⇒ Object

Sign the (String) message msg. We return a detached base-64 encoded signature (String). In order to verify the message, you will need both the signature and msg. If we don’t know private key, we raise UnknownPrivateKey. (c.f. Client.verify())



504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
# File 'lib/bc.rb', line 504

def sign(msg)
	begin
		@bc.jr.signmessage(@address, msg)
	rescue Jr::ServerError => ex
		case ex.code
			when -13
				raise LockedWallet

			when -4
				raise UnknownPrivateKey, @address

			else
				raise
		end
	end
end

#to_sObject

:nodoc:



527
528
529
# File 'lib/bc.rb', line 527

def to_s # :nodoc:
	@address
end

#transactionsObject

Return an Array of every Transaction associated with us.



457
458
459
460
461
# File 'lib/bc.rb', line 457

def transactions
	.transactions.find_all do |tx|
		tx.include?(self)
	end
end

#valid?Boolean

Are we a valid Bitcoin address?

Returns:

  • (Boolean)


464
465
466
# File 'lib/bc.rb', line 464

def valid?
	@bc.is_valid?(@address)
end

#verify(msg, sig) ⇒ Object

Verify the signature sig of a message msg signed by our private key. We return true if the signature is valid, or false if it is not.



523
524
525
# File 'lib/bc.rb', line 523

def verify(msg, sig)
	@bc.jr.verifymessage(@address, msg, sig)
end