Documentation ¶
Overview ¶
Package flow provides libraries and tools for building Go applications on Flow.
Index ¶
- Constants
- Variables
- type Account
- type AccountCreatedEvent
- type AccountKey
- func (a AccountKey) Encode() []byte
- func (a *AccountKey) FromPrivateKey(privKey crypto.PrivateKey) *AccountKey
- func (a *AccountKey) SetHashAlgo(hashAlgo crypto.HashAlgorithm) *AccountKey
- func (a *AccountKey) SetPublicKey(pubKey crypto.PublicKey) *AccountKey
- func (a *AccountKey) SetSigAlgo(sigAlgo crypto.SignatureAlgorithm) *AccountKey
- func (a *AccountKey) SetWeight(weight int) *AccountKey
- func (a AccountKey) Validate() error
- type Address
- type Block
- type BlockHeader
- type BlockPayload
- type BlockSeal
- type Collection
- type CollectionGuarantee
- type Event
- type Identifier
- type ProposalKey
- type Transaction
- func (t *Transaction) AddAuthorizer(address Address) *Transaction
- func (t *Transaction) AddEnvelopeSignature(address Address, keyID int, sig []byte) *Transaction
- func (t *Transaction) AddPayloadSignature(address Address, keyID int, sig []byte) *Transaction
- func (t *Transaction) Encode() []byte
- func (t *Transaction) EnvelopeMessage() []byte
- func (t *Transaction) ID() Identifier
- func (t *Transaction) PayloadMessage() []byte
- func (t *Transaction) SetGasLimit(limit uint64) *Transaction
- func (t *Transaction) SetPayer(address Address) *Transaction
- func (t *Transaction) SetProposalKey(address Address, keyID int, sequenceNum uint64) *Transaction
- func (t *Transaction) SetReferenceBlockID(blockID Identifier) *Transaction
- func (t *Transaction) SetScript(script []byte) *Transaction
- func (t *Transaction) SignEnvelope(address Address, keyID int, signer crypto.Signer) error
- func (t *Transaction) SignPayload(address Address, keyID int, signer crypto.Signer) error
- type TransactionResult
- type TransactionSignature
- type TransactionStatus
Examples ¶
Constants ¶
const ( EventAccountCreated string = "flow.AccountCreated" EventAccountUpdated string = "flow.AccountUpdated" )
List of built-in account event types.
const AccountKeyWeightThreshold int = 1000
AccountKeyWeightThreshold is the total key weight required to authorize access to an account.
const (
// AddressLength is the size of an account address.
AddressLength = 20
)
Variables ¶
var ( // ZeroAddress represents the "zero address" (account that no one owns). ZeroAddress = Address{} // RootAddress is the address of the Flow root account. RootAddress = BytesToAddress(big.NewInt(1).Bytes()) )
var DefaultHasher crypto.Hasher
DefaultHasher is the default hasher used by Flow.
var ZeroID = Identifier{}
ZeroID is the empty identifier.
Functions ¶
This section is empty.
Types ¶
type Account ¶
type Account struct { Address Address Balance uint64 Code []byte Keys []*AccountKey }
An Account is an account on the Flow network.
type AccountCreatedEvent ¶
type AccountCreatedEvent Event
An AccountCreatedEvent is emitted when a transaction creates a new Flow account.
This event contains the following fields: - Address: Address
func (AccountCreatedEvent) Address ¶
func (evt AccountCreatedEvent) Address() Address
Address returns the address of the newly-created account.
type AccountKey ¶
type AccountKey struct { ID int PublicKey crypto.PublicKey SigAlgo crypto.SignatureAlgorithm HashAlgo crypto.HashAlgorithm Weight int SequenceNumber uint64 }
An AccountKey is a public key associated with an account.
func DecodeAccountKey ¶
func DecodeAccountKey(b []byte) (*AccountKey, error)
DecodeAccountKey decodes the RLP byte representation of an account key.
func (AccountKey) Encode ¶
func (a AccountKey) Encode() []byte
Encode returns the canonical RLP byte representation of this account key.
func (*AccountKey) FromPrivateKey ¶
func (a *AccountKey) FromPrivateKey(privKey crypto.PrivateKey) *AccountKey
FromPrivateKey sets the public key and signature algorithm based on the provided private key.
func (*AccountKey) SetHashAlgo ¶
func (a *AccountKey) SetHashAlgo(hashAlgo crypto.HashAlgorithm) *AccountKey
SetHashAlgo sets the hash algorithm for this account key.
func (*AccountKey) SetPublicKey ¶
func (a *AccountKey) SetPublicKey(pubKey crypto.PublicKey) *AccountKey
SetPublicKey sets the public key for this account key.
func (*AccountKey) SetSigAlgo ¶
func (a *AccountKey) SetSigAlgo(sigAlgo crypto.SignatureAlgorithm) *AccountKey
SetSigAlgo sets the signature algorithm for this account key.
func (*AccountKey) SetWeight ¶
func (a *AccountKey) SetWeight(weight int) *AccountKey
SetWeight sets the weight for this account key.
func (AccountKey) Validate ¶
func (a AccountKey) Validate() error
Validate returns an error if this account key is invalid.
An account key can be invalid for the following reasons: - It specifies an incompatible signature/hash algorithm pairing - (TODO) It specifies a negative key weight
type Address ¶
type Address [AddressLength]byte
An Address is a 20-byte identifier for a Flow account.
func BytesToAddress ¶
BytesToAddress returns Address with value b.
If b is larger than len(h), b will be cropped from the left.
func HexToAddress ¶
HexToAddress converts a hex string to an Address.
func (Address) MarshalJSON ¶
func (*Address) SetBytes ¶
SetBytes sets this address to the value of b.
If b is larger than len(a) it will panic.
func (Address) Short ¶
Short returns the string representation of this address with leading zeros removed.
func (*Address) UnmarshalJSON ¶
type Block ¶
type Block struct { BlockHeader BlockPayload }
A Block is a set of state mutations applied to the Flow blockchain.
type BlockHeader ¶
type BlockHeader struct { ID Identifier ParentID Identifier Height uint64 }
A BlockHeader is a summary of a full block.
type BlockPayload ¶
type BlockPayload struct { CollectionGuarantees []*CollectionGuarantee Seals []*BlockSeal }
A BlockPayload is the full contents of a block.
A payload contains the collection guarantees and seals for a block.
type Collection ¶
type Collection struct {
TransactionIDs []Identifier
}
A Collection is a list of transactions bundled together for inclusion in a block.
func (Collection) Encode ¶
func (c Collection) Encode() []byte
Encode returns the canonical RLP byte representation of this collection.
func (Collection) ID ¶
func (c Collection) ID() Identifier
ID returns the canonical SHA3-256 hash of this collection.
type CollectionGuarantee ¶
type CollectionGuarantee struct {
CollectionID Identifier
}
A CollectionGuarantee is an attestation signed by the nodes that have guaranteed a collection.
type Event ¶
type Event struct { // Type is the qualified event type. Type string // TransactionID is the ID of the transaction this event was emitted from. TransactionID Identifier // TransactionIndex is the index of the transaction this event was emitted from, within its containing block. TransactionIndex int // EventIndex is the index of the event within the transaction it was emitted from. EventIndex int // Value contains the event data. Value cadence.Event }
type Identifier ¶
type Identifier [32]byte
An Identifier is a 32-byte unique identifier for an entity.
func BytesToID ¶
func BytesToID(b []byte) Identifier
BytesToID constructs an identifier from a byte slice.
func HashToID ¶
func HashToID(hash []byte) Identifier
func (Identifier) Bytes ¶
func (i Identifier) Bytes() []byte
Bytes returns the bytes representation of this identifier.
func (Identifier) Hex ¶
func (i Identifier) Hex() string
Hex returns the hexadecimal string representation of this identifier.
func (Identifier) String ¶
func (i Identifier) String() string
String returns the string representation of this identifier.
type ProposalKey ¶
A ProposalKey is the key that specifies the proposal key and sequence number for a transaction.
type Transaction ¶
type Transaction struct { Script []byte ReferenceBlockID Identifier GasLimit uint64 ProposalKey ProposalKey Payer Address Authorizers []Address PayloadSignatures []TransactionSignature EnvelopeSignatures []TransactionSignature }
A Transaction is a full transaction object containing a payload and signatures.
Example ¶
// Mock user accounts adrianLaptopKey := &flow.AccountKey{ ID: 3, SequenceNumber: 42, } adrianPhoneKey := &flow.AccountKey{ID: 2} adrian := flow.Account{ Address: flow.HexToAddress("01"), Keys: []*flow.AccountKey{ adrianLaptopKey, adrianPhoneKey, }, } blaineHardwareKey := &flow.AccountKey{ID: 7} blaine := flow.Account{ Address: flow.HexToAddress("02"), Keys: []*flow.AccountKey{ blaineHardwareKey, }, } // Transaction preparation tx := flow.NewTransaction(). SetScript([]byte(`transaction { execute { log("Hello, World!") } }`)). SetReferenceBlockID(flow.Identifier{0x01, 0x02}). SetGasLimit(42). SetProposalKey(adrian.Address, adrianLaptopKey.ID, adrianLaptopKey.SequenceNumber). SetPayer(blaine.Address). AddAuthorizer(adrian.Address) fmt.Printf("Transaction ID (before signing): %s\n\n", tx.ID()) // Signing err := tx.SignPayload(adrian.Address, adrianLaptopKey.ID, test.MockSigner([]byte{1})) if err != nil { panic(err) } err = tx.SignPayload(adrian.Address, adrianPhoneKey.ID, test.MockSigner([]byte{2})) if err != nil { panic(err) } err = tx.SignEnvelope(blaine.Address, blaineHardwareKey.ID, test.MockSigner([]byte{3})) if err != nil { panic(err) } fmt.Println("Payload signatures:") for _, sig := range tx.PayloadSignatures { fmt.Printf( "Address: %s, Key ID: %d, Signature: %x\n", sig.Address, sig.KeyID, sig.Signature, ) } fmt.Println() fmt.Println("Envelope signatures:") for _, sig := range tx.EnvelopeSignatures { fmt.Printf( "Address: %s, Key ID: %d, Signature: %x\n", sig.Address, sig.KeyID, sig.Signature, ) } fmt.Println() fmt.Printf("Transaction ID (after signing): %s\n", tx.ID())
Output: Transaction ID (before signing): 142a7862e1718bae9bae109d950a45a2540f98593edf1916ad89f4e22a0960c9 Payload signatures: Address: 0000000000000000000000000000000000000001, Key ID: 2, Signature: 02 Address: 0000000000000000000000000000000000000001, Key ID: 3, Signature: 01 Envelope signatures: Address: 0000000000000000000000000000000000000002, Key ID: 7, Signature: 03 Transaction ID (after signing): ae9ef40a6f74117ded103e8bd8c8b0fb97c5a2b3503c1e7ba4aa467f662e31fb
func NewTransaction ¶
func NewTransaction() *Transaction
NewTransaction initializes and returns an empty transaction.
func (*Transaction) AddAuthorizer ¶
func (t *Transaction) AddAuthorizer(address Address) *Transaction
AddAuthorizer adds an authorizer account to this transaction.
func (*Transaction) AddEnvelopeSignature ¶
func (t *Transaction) AddEnvelopeSignature(address Address, keyID int, sig []byte) *Transaction
AddEnvelopeSignature adds an envelope signature to the transaction for the given address and key ID.
func (*Transaction) AddPayloadSignature ¶
func (t *Transaction) AddPayloadSignature(address Address, keyID int, sig []byte) *Transaction
AddPayloadSignature adds a payload signature to the transaction for the given address and key ID.
func (*Transaction) Encode ¶
func (t *Transaction) Encode() []byte
Encode serializes the full transaction data including the payload and all signatures.
func (*Transaction) EnvelopeMessage ¶
func (t *Transaction) EnvelopeMessage() []byte
EnvelopeMessage returns the signable message for the transaction envelope.
This message is only signed by the payer account.
func (*Transaction) ID ¶
func (t *Transaction) ID() Identifier
ID returns the canonical SHA3-256 hash of this transaction.
func (*Transaction) PayloadMessage ¶
func (t *Transaction) PayloadMessage() []byte
func (*Transaction) SetGasLimit ¶
func (t *Transaction) SetGasLimit(limit uint64) *Transaction
SetGasLimit sets the gas limit for this transaction.
func (*Transaction) SetPayer ¶
func (t *Transaction) SetPayer(address Address) *Transaction
SetPayer sets the payer account for this transaction.
func (*Transaction) SetProposalKey ¶
func (t *Transaction) SetProposalKey(address Address, keyID int, sequenceNum uint64) *Transaction
SetProposalKey sets the proposal key and sequence number for this transaction.
The first two arguments specify the account key to be used, and the last argument is the sequence number being declared.
func (*Transaction) SetReferenceBlockID ¶
func (t *Transaction) SetReferenceBlockID(blockID Identifier) *Transaction
SetReferenceBlockID sets the reference block ID for this transaction.
func (*Transaction) SetScript ¶
func (t *Transaction) SetScript(script []byte) *Transaction
SetScript sets the Cadence script for this transaction.
func (*Transaction) SignEnvelope ¶
SignEnvelope signs the full transaction (payload + payload signatures) with the specified account key.
The resulting signature is combined with the account address and key ID before being added to the transaction.
This function returns an error if the signature cannot be generated.
func (*Transaction) SignPayload ¶
SignPayload signs the transaction payload with the specified account key.
The resulting signature is combined with the account address and key ID before being added to the transaction.
This function returns an error if the signature cannot be generated.
type TransactionResult ¶
type TransactionResult struct { Status TransactionStatus Error error Events []Event }
type TransactionSignature ¶
A TransactionSignature is a signature associated with a specific account key.
type TransactionStatus ¶
type TransactionStatus int
TransactionStatus represents the status of a transaction.
const ( // TransactionStatusUnknown indicates that the transaction status is not known. TransactionStatusUnknown TransactionStatus = iota // TransactionStatusPending is the status of a pending transaction. TransactionStatusPending // TransactionStatusFinalized is the status of a finalized transaction. TransactionStatusFinalized // TransactionStatusExecuted is the status of an executed transaction. TransactionStatusExecuted // TransactionStatusSealed is the status of a sealed transaction. TransactionStatusSealed )
func (TransactionStatus) String ¶
func (s TransactionStatus) String() string
String returns the string representation of a transaction status.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package templates provides functions for generating common Cadence scripts.
|
Package templates provides functions for generating common Cadence scripts. |