Class: BTC::AssetAddress

Inherits:
Address show all
Defined in:
lib/btcruby/open_assets/asset_address.rb

Overview

Represents an Asset Address, where the assets can be sent.

Constant Summary collapse

NAMESPACE =
0x13

Constants included from Opcodes

Opcodes::OPCODE_NAME_TO_VALUE, Opcodes::OPCODE_VALUE_TO_NAME, Opcodes::OP_0, Opcodes::OP_0NOTEQUAL, Opcodes::OP_1, Opcodes::OP_10, Opcodes::OP_11, Opcodes::OP_12, Opcodes::OP_13, Opcodes::OP_14, Opcodes::OP_15, Opcodes::OP_16, Opcodes::OP_1ADD, Opcodes::OP_1NEGATE, Opcodes::OP_1SUB, Opcodes::OP_2, Opcodes::OP_2DIV, Opcodes::OP_2DROP, Opcodes::OP_2DUP, Opcodes::OP_2MUL, Opcodes::OP_2OVER, Opcodes::OP_2ROT, Opcodes::OP_2SWAP, Opcodes::OP_3, Opcodes::OP_3DUP, Opcodes::OP_4, Opcodes::OP_5, Opcodes::OP_6, Opcodes::OP_7, Opcodes::OP_8, Opcodes::OP_9, Opcodes::OP_ABS, Opcodes::OP_ADD, Opcodes::OP_AND, Opcodes::OP_BOOLAND, Opcodes::OP_BOOLOR, Opcodes::OP_CAT, Opcodes::OP_CHECKLOCKTIMEVERIFY, Opcodes::OP_CHECKMULTISIG, Opcodes::OP_CHECKMULTISIGVERIFY, Opcodes::OP_CHECKSIG, Opcodes::OP_CHECKSIGVERIFY, Opcodes::OP_CODESEPARATOR, Opcodes::OP_DEPTH, Opcodes::OP_DIV, Opcodes::OP_DROP, Opcodes::OP_DUP, Opcodes::OP_ELSE, Opcodes::OP_ENDIF, Opcodes::OP_EQUAL, Opcodes::OP_EQUALVERIFY, Opcodes::OP_FALSE, Opcodes::OP_FROMALTSTACK, Opcodes::OP_GREATERTHAN, Opcodes::OP_GREATERTHANOREQUAL, Opcodes::OP_HASH160, Opcodes::OP_HASH256, Opcodes::OP_IF, Opcodes::OP_IFDUP, Opcodes::OP_INVALIDOPCODE, Opcodes::OP_INVERT, Opcodes::OP_LEFT, Opcodes::OP_LESSTHAN, Opcodes::OP_LESSTHANOREQUAL, Opcodes::OP_LSHIFT, Opcodes::OP_MAX, Opcodes::OP_MIN, Opcodes::OP_MOD, Opcodes::OP_MUL, Opcodes::OP_NEGATE, Opcodes::OP_NIP, Opcodes::OP_NOP, Opcodes::OP_NOP1, Opcodes::OP_NOP10, Opcodes::OP_NOP2, Opcodes::OP_NOP3, Opcodes::OP_NOP4, Opcodes::OP_NOP5, Opcodes::OP_NOP6, Opcodes::OP_NOP7, Opcodes::OP_NOP8, Opcodes::OP_NOP9, Opcodes::OP_NOT, Opcodes::OP_NOTIF, Opcodes::OP_NUMEQUAL, Opcodes::OP_NUMEQUALVERIFY, Opcodes::OP_NUMNOTEQUAL, Opcodes::OP_OR, Opcodes::OP_OVER, Opcodes::OP_PICK, Opcodes::OP_PUSHDATA1, Opcodes::OP_PUSHDATA2, Opcodes::OP_PUSHDATA4, Opcodes::OP_RESERVED, Opcodes::OP_RESERVED1, Opcodes::OP_RESERVED2, Opcodes::OP_RETURN, Opcodes::OP_RIGHT, Opcodes::OP_RIPEMD160, Opcodes::OP_ROLL, Opcodes::OP_ROT, Opcodes::OP_RSHIFT, Opcodes::OP_SHA1, Opcodes::OP_SHA256, Opcodes::OP_SIZE, Opcodes::OP_SUB, Opcodes::OP_SUBSTR, Opcodes::OP_SWAP, Opcodes::OP_TOALTSTACK, Opcodes::OP_TRUE, Opcodes::OP_TUCK, Opcodes::OP_VER, Opcodes::OP_VERIF, Opcodes::OP_VERIFY, Opcodes::OP_VERNOTIF, Opcodes::OP_WITHIN, Opcodes::OP_XOR

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Address

#==, #data, #hash, #inspect, #mainnet?, mux_parse_raw_data, #p2pkh?, #p2sh?, parse, parse_raw_data, #public_address, register_class, #testnet?, #to_s, #version

Constructor Details

#initialize(string: nil, bitcoin_address: nil, _raw_data: nil) ⇒ AssetAddress

Returns a new instance of AssetAddress.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/btcruby/open_assets/asset_address.rb', line 19

def initialize(string: nil, bitcoin_address: nil, _raw_data: nil)
  if string
    _raw_data ||= Base58.data_from_base58check(string)
    raise FormatError, "Too short AssetAddress" if _raw_data.bytesize < 2
    raise FormatError, "Invalid namespace for AssetAddress" if _raw_data.bytes[0] != self.class.mainnet_version
    @bitcoin_address = BTC::Address.mux_parse_raw_data(_raw_data[1..-1])
    @base58check_string = string
  elsif bitcoin_address
    @base58check_string = nil
    @bitcoin_address = BTC::Address.parse(bitcoin_address)
  else
    raise ArgumentError, "Either data or string must be provided"
  end
  # If someone accidentally supplied AssetAddress as a bitcoin address, 
  # simply unwrap the bitcoin address from it.
  while @bitcoin_address.is_a?(self.class)
    @bitcoin_address = @bitcoin_address.bitcoin_address
    @base58check_string = nil
  end
end

Instance Attribute Details

#bitcoin_addressObject (readonly)

Returns the value of attribute bitcoin_address.



17
18
19
# File 'lib/btcruby/open_assets/asset_address.rb', line 17

def bitcoin_address
  @bitcoin_address
end

Class Method Details

.mainnet_versionObject



9
10
11
# File 'lib/btcruby/open_assets/asset_address.rb', line 9

def self.mainnet_version
  NAMESPACE
end

.testnet_versionObject



13
14
15
# File 'lib/btcruby/open_assets/asset_address.rb', line 13

def self.testnet_version
  NAMESPACE
end

Instance Method Details

#data_for_base58check_encodingObject



48
49
50
# File 'lib/btcruby/open_assets/asset_address.rb', line 48

def data_for_base58check_encoding
  BTC::Data.data_from_bytes([self.class.mainnet_version]) + @bitcoin_address.data_for_base58check_encoding
end

#networkObject



40
41
42
# File 'lib/btcruby/open_assets/asset_address.rb', line 40

def network
  @bitcoin_address.network
end

#scriptObject



44
45
46
# File 'lib/btcruby/open_assets/asset_address.rb', line 44

def script
  @bitcoin_address.script
end