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.



459
460
461
462
463
464
465
466
467
468
469
470
# File 'lib/bc.rb', line 459

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.



455
456
457
# File 'lib/bc.rb', line 455

def address
  @address
end

#bcObject (readonly)

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



452
453
454
# File 'lib/bc.rb', line 452

def bc
  @bc
end

Instance Method Details

#accountObject

Get the Account we’re associated with.



505
506
507
# File 'lib/bc.rb', line 505

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.



511
512
513
514
# File 'lib/bc.rb', line 511

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

#inspectObject

:nodoc:



547
548
549
# File 'lib/bc.rb', line 547

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.



488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
# File 'lib/bc.rb', line 488

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())



520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
# File 'lib/bc.rb', line 520

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:



543
544
545
# File 'lib/bc.rb', line 543

def to_s # :nodoc:
	@address
end

#transactionsObject

Return an Array of every Transaction associated with us.



473
474
475
476
477
# File 'lib/bc.rb', line 473

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

#valid?Boolean

Are we a valid Bitcoin address?

Returns:

  • (Boolean)


480
481
482
# File 'lib/bc.rb', line 480

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.



539
540
541
# File 'lib/bc.rb', line 539

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