github.com/Bytom/bytom@v1.1.2-0.20210127130405-ae40204c0b09/protocol/bc/types/issuance.go (about)

     1  package types
     2  
     3  import (
     4  	"github.com/bytom/bytom/crypto/sha3pool"
     5  	"github.com/bytom/bytom/protocol/bc"
     6  )
     7  
     8  // IssuanceInput satisfies the TypedInput interface and represents a issuance.
     9  type IssuanceInput struct {
    10  	Nonce  []byte
    11  	Amount uint64
    12  
    13  	AssetDefinition []byte
    14  	VMVersion       uint64
    15  	IssuanceProgram []byte
    16  	Arguments       [][]byte
    17  }
    18  
    19  // NewIssuanceInput create a new IssuanceInput struct.
    20  func NewIssuanceInput(nonce []byte, amount uint64, issuanceProgram []byte, arguments [][]byte, assetDefinition []byte) *TxInput {
    21  	return &TxInput{
    22  		AssetVersion: 1,
    23  		TypedInput: &IssuanceInput{
    24  			Nonce:           nonce,
    25  			Amount:          amount,
    26  			AssetDefinition: assetDefinition,
    27  			VMVersion:       1,
    28  			IssuanceProgram: issuanceProgram,
    29  			Arguments:       arguments,
    30  		},
    31  	}
    32  }
    33  
    34  // InputType is the interface function for return the input type.
    35  func (ii *IssuanceInput) InputType() uint8 { return IssuanceInputType }
    36  
    37  // AssetID calculate the assetID of the issuance input.
    38  func (ii *IssuanceInput) AssetID() bc.AssetID {
    39  	defhash := ii.AssetDefinitionHash()
    40  	return bc.ComputeAssetID(ii.IssuanceProgram, ii.VMVersion, &defhash)
    41  }
    42  
    43  // AssetDefinitionHash return the hash of the issuance asset definition.
    44  func (ii *IssuanceInput) AssetDefinitionHash() (defhash bc.Hash) {
    45  	sha := sha3pool.Get256()
    46  	defer sha3pool.Put256(sha)
    47  	sha.Write(ii.AssetDefinition)
    48  	defhash.ReadFrom(sha)
    49  	return defhash
    50  }
    51  
    52  // NonceHash return the hash of the issuance asset definition.
    53  func (ii *IssuanceInput) NonceHash() (hash bc.Hash) {
    54  	sha := sha3pool.Get256()
    55  	defer sha3pool.Put256(sha)
    56  	sha.Write(ii.Nonce)
    57  	hash.ReadFrom(sha)
    58  	return hash
    59  }