class OpenAssets::Protocol::TransactionOutput
Represents a transaction output and its asset ID and asset quantity.
Attributes
account[RW]
asset_definition[RW]
asset_definition_url[RW]
asset_id[RW]
asset_quantity[RW]
metadata[RW]
output_type[RW]
script[RW]
value[RW]
Public Class Methods
new(value, script, asset_id = nil, asset_quantity = 0, output_type = OutputType::UNCOLORED, metadata = '')
click to toggle source
@param [Integer] value The satoshi value of the output. @param [Bitcoin::Script] script The script controlling redemption of the output. @param [String] asset_id
The asset ID of the output. @param [Integer] asset_quantity
The asset quantity of the output. @param [OpenAssets::Transaction::OutPutType] output_type
The type of the output.
# File lib/openassets/protocol/transaction_output.rb, line 26 def initialize(value, script, asset_id = nil, asset_quantity = 0, output_type = OutputType::UNCOLORED, metadata = '') raise ArgumentError, "invalid output_type : #{output_type}" unless OutputType.all.include?(output_type) raise ArgumentError, "invalid asset_quantity. asset_quantity should be unsignd integer. " unless asset_quantity.between?(0, MarkerOutput::MAX_ASSET_QUANTITY) @value = value @script = script @asset_id = asset_id @asset_quantity = asset_quantity @output_type = output_type @metadata = metadata load_asset_definition_url end
Public Instance Methods
address()
click to toggle source
# File lib/openassets/protocol/transaction_output.rb, line 74 def address return @script.addresses.first if @script.p2pkh? || @script.p2sh? || @script.p2wpkh? || @script.p2wsh? nil # TODO Bitcoin::Script#to_addr after it enable end
asset_amount()
click to toggle source
calculate asset amount. asset amount is the value obtained by converting the asset quantity to the unit of divisibility that are defined in the Asset definition file.
# File lib/openassets/protocol/transaction_output.rb, line 40 def asset_amount d = divisibility d > 0 ? (@asset_quantity.to_f / (10 ** d)).to_f : @asset_quantity end
divisibility()
click to toggle source
get divisibility defined by asset definition file.
# File lib/openassets/protocol/transaction_output.rb, line 46 def divisibility return 0 if !valid_asset_definition? || @asset_definition.divisibility.nil? @asset_definition.divisibility end
oa_address()
click to toggle source
# File lib/openassets/protocol/transaction_output.rb, line 79 def oa_address a = address return nil if a.nil? address_to_oa_address(a) end
proof_of_authenticity()
click to toggle source
Verify proof of authenticity.
# File lib/openassets/protocol/transaction_output.rb, line 52 def proof_of_authenticity valid_asset_definition? ? @asset_definition.proof_of_authenticity : false end
script_type()
click to toggle source
get pubkey script type
# File lib/openassets/protocol/transaction_output.rb, line 86 def script_type return 'pubkeyhash' if script.p2pkh? return 'scripthash' if script.p2sh? return 'nulldata' if script.standard_op_return? return 'multisig' if script.multisig? return 'witness_v0_keyhash' if script.p2wpkh? return 'witness_v0_scripthash' if script.p2wsh? 'nonstandard' end
to_hash()
click to toggle source
convert to hash object.
# File lib/openassets/protocol/transaction_output.rb, line 57 def to_hash { 'address' => address, 'oa_address' => oa_address, 'script' => @script.to_payload.bth, 'script_type' => script_type, 'amount' => satoshi_to_coin(@value), 'asset_id' => @asset_id, 'asset_quantity' => @asset_quantity.to_s, 'asset_amount' => asset_amount.to_s, 'account' => @account, 'asset_definition_url' => @asset_definition_url, 'proof_of_authenticity' => proof_of_authenticity, 'output_type' => OpenAssets::Protocol::OutputType.output_type_label(@output_type) } end
Private Instance Methods
load_asset_definition(url)
click to toggle source
# File lib/openassets/protocol/transaction_output.rb, line 126 def load_asset_definition(url) unless @@definition_cache.has_key?(url) loader = AssetDefinitionLoader.new(metadata_url) @@definition_cache[url] = loader.load_definition end @@definition_cache[url] end
load_asset_definition_url()
click to toggle source
get Asset definition url that is included metadata.
# File lib/openassets/protocol/transaction_output.rb, line 101 def load_asset_definition_url @asset_definition_url = '' return if @metadata.nil? || @metadata.length == 0 if @metadata.start_with?('u=') @asset_definition = load_asset_definition(metadata_url) if valid_asset_definition? @asset_definition_url = metadata_url else @asset_definition_url = "The asset definition is invalid. #{metadata_url}" end else @asset_definition_url = 'Invalid metadata format.' end end
metadata_url()
click to toggle source
# File lib/openassets/protocol/transaction_output.rb, line 116 def metadata_url unless @metadata.nil? @metadata.slice(2..-1) end end
valid_asset_definition?()
click to toggle source
# File lib/openassets/protocol/transaction_output.rb, line 122 def valid_asset_definition? !@asset_definition.nil? && @asset_definition.include_asset_id?(@asset_id) end