Documentation ¶
Index ¶
- type BigInt
- type Bytes
- type Bytes32
- type ChainSelector
- type CommitPluginCodec
- type CommitPluginReport
- type ExecutePluginCodec
- type ExecutePluginReport
- type ExecutePluginReportSingleChain
- type GasPriceChain
- type MerkleRootChain
- type Message
- type MessageHasher
- type PriceUpdates
- type RMNCrypto
- type RMNECDSASignature
- type RMNLaneUpdate
- type RMNReport
- type RampMessageHeader
- type RampTokenAmount
- type SeqNum
- type SeqNumRange
- func (s SeqNumRange) Contains(seq SeqNum) bool
- func (s SeqNumRange) End() SeqNum
- func (s *SeqNumRange) Limit(n uint64) SeqNumRange
- func (s SeqNumRange) Overlaps(other SeqNumRange) bool
- func (s *SeqNumRange) SetEnd(v SeqNum)
- func (s *SeqNumRange) SetStart(v SeqNum)
- func (s SeqNumRange) Start() SeqNum
- func (s SeqNumRange) String() string
- type TokenDataEncoder
- type TokenPrice
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Bytes ¶
type Bytes []byte
func NewBytesFromString ¶
func (Bytes) MarshalJSON ¶
func (*Bytes) UnmarshalJSON ¶
type Bytes32 ¶
type Bytes32 [32]byte
func NewBytes32FromString ¶
func (Bytes32) MarshalJSON ¶
func (*Bytes32) UnmarshalJSON ¶
type ChainSelector ¶
type ChainSelector uint64
func (ChainSelector) String ¶
func (c ChainSelector) String() string
type CommitPluginCodec ¶
type CommitPluginCodec interface { Encode(context.Context, CommitPluginReport) ([]byte, error) Decode(context.Context, []byte) (CommitPluginReport, error) }
type CommitPluginReport ¶
type CommitPluginReport struct { MerkleRoots []MerkleRootChain `json:"merkleRoots"` PriceUpdates PriceUpdates `json:"priceUpdates"` // RMNSignatures are the ECDSA signatures from the RMN signing nodes on the RMNReport structure. // For more details see the contract here: https://github.com/smartcontractkit/chainlink/blob/7ba0f37134a618375542079ff1805fe2224d7916/contracts/src/v0.8/ccip/interfaces/IRMNV2.sol#L8-L12 RMNSignatures []RMNECDSASignature `json:"rmnSignatures"` // RMNRawVs is a 256-bit bitmap. A bit is set if the v value of the signature is 28, // and unset if the v value is 27. // Note that this implies that the maximum number of RMN signatures is 256. RMNRawVs BigInt `json:"rmnRawVs"` }
CommitPluginReport contains the necessary information to commit CCIP messages from potentially many source chains, to a single destination chain.
It must consist of either:
- a non-empty MerkleRoots array, or
- a non-empty PriceUpdates array
If neither of the above is provided the report is considered empty and should not be transmitted on-chain.
In the event the MerkleRoots array is non-empty, it may also contain RMNSignatures, if RMN is configured for some lanes involved in the commitment. A report with RMN signatures but without merkle roots is invalid.
func (CommitPluginReport) IsEmpty ¶
func (r CommitPluginReport) IsEmpty() bool
IsEmpty returns true if the CommitPluginReport is empty
type ExecutePluginCodec ¶
type ExecutePluginCodec interface { Encode(context.Context, ExecutePluginReport) ([]byte, error) Decode(context.Context, []byte) (ExecutePluginReport, error) }
type ExecutePluginReport ¶
type ExecutePluginReport struct {
ChainReports []ExecutePluginReportSingleChain `json:"chainReports"`
}
type ExecutePluginReportSingleChain ¶
type ExecutePluginReportSingleChain struct { SourceChainSelector ChainSelector `json:"sourceChainSelector"` Messages []Message `json:"messages"` OffchainTokenData [][][]byte `json:"offchainTokenData"` Proofs []Bytes32 `json:"proofs"` ProofFlagBits BigInt `json:"proofFlagBits"` }
type GasPriceChain ¶
type GasPriceChain struct { GasPrice BigInt `json:"gasPrice"` ChainSel ChainSelector `json:"chainSel"` }
func NewGasPriceChain ¶
func NewGasPriceChain(gasPrice *big.Int, chainSel ChainSelector) GasPriceChain
type MerkleRootChain ¶
type MerkleRootChain struct { ChainSel ChainSelector `json:"chain"` OnRampAddress Bytes `json:"onRampAddress"` SeqNumsRange SeqNumRange `json:"seqNumsRange"` MerkleRoot Bytes32 `json:"merkleRoot"` }
MerkleRootChain Mirroring https://github.com/smartcontractkit/chainlink/blob/cd5c78959575f593b27fd83d8766086d0c678487/contracts/src/v0.8/ccip/libraries/Internal.sol#L356-L362
func NewMerkleRootChain ¶
func NewMerkleRootChain( chainSel ChainSelector, onRampAddress Bytes, seqNumsRange SeqNumRange, merkleRoot Bytes32, ) MerkleRootChain
func (MerkleRootChain) Equals ¶ added in v0.3.0
func (m MerkleRootChain) Equals(other MerkleRootChain) bool
type Message ¶
type Message struct { // Header is the family-agnostic header for OnRamp and OffRamp messages. // This is always set on all CCIP messages. Header RampMessageHeader `json:"header"` // Sender address on the source chain. // i.e if the source chain is EVM, this is an abi-encoded EVM address. Sender Bytes `json:"sender"` // Data is the arbitrary data payload supplied by the message sender. Data Bytes `json:"data"` // Receiver is the receiver address on the destination chain. // This is encoded in the destination chain family specific encoding. // i.e if the destination is EVM, this is abi.encode(receiver). Receiver Bytes `json:"receiver"` // ExtraArgs is destination-chain specific extra args, such as the gasLimit for EVM chains. ExtraArgs Bytes `json:"extraArgs"` // FeeToken is the fee token address. // i.e if the source chain is EVM, len(FeeToken) == 20 (i.e, is not abi-encoded). FeeToken Bytes `json:"feeToken"` // FeeTokenAmount is the amount of fee tokens paid. FeeTokenAmount BigInt `json:"feeTokenAmount"` // FeeValueJuels is the fee amount in Juels FeeValueJuels BigInt `json:"feeValueJuels"` // TokenAmounts is the array of tokens and amounts to transfer. TokenAmounts []RampTokenAmount `json:"tokenAmounts"` }
Message is the generic Any2Any message type for CCIP messages. It represents, in particular, a message emitted by a CCIP onramp. The message is expected to be consumed by a CCIP offramp after translating it into the appropriate format for the destination chain.
type MessageHasher ¶
type PriceUpdates ¶
type PriceUpdates struct { TokenPriceUpdates []TokenPrice `json:"tokenPriceUpdates"` GasPriceUpdates []GasPriceChain `json:"gasPriceUpdates"` }
type RMNCrypto ¶ added in v0.2.2
type RMNCrypto interface { // VerifyReportSignatures verifies each provided signature against the provided report and the signer addresses. // If any signature is invalid (no matching signer address is found), an error is returned immediately. VerifyReportSignatures( ctx context.Context, sigs []RMNECDSASignature, report RMNReport, signerAddresses []Bytes, ) error }
RMNCrypto provides a chain-agnostic interface for verifying RMN signatures. For example, on EVM, RMN reports are abi-encoded prior to being signed. On Solana, they would be borsh encoded instead, etc.
type RMNECDSASignature ¶ added in v0.2.2
RMNECDSASignature represents the signature provided by RMN on the RMNReport structure. The V value of the signature is included in the top-level commit report as part of a bitmap.
type RMNLaneUpdate ¶ added in v0.2.2
type RMNLaneUpdate struct { SourceChainSelector ChainSelector OnRampAddress Bytes // (for EVM should be abi-encoded) MinSeqNr SeqNum MaxSeqNr SeqNum MerkleRoot Bytes32 }
RMNLaneUpdate represents an interval that has been observed by an RMN node. It is part of the payload that is signed and transmitted onchain.
type RMNReport ¶ added in v0.2.2
type RMNReport struct { ReportVersion string // e.g. "RMN_V1_6_ANY2EVM_REPORT". DestChainID BigInt // If applies, a chain specific id, e.g. evm chain id otherwise empty. DestChainSelector ChainSelector RmnRemoteContractAddress Bytes OfframpAddress Bytes RmnHomeContractConfigDigest Bytes32 LaneUpdates []RMNLaneUpdate }
RMNReport is the payload that is signed by the RMN nodes, transmitted and verified onchain.
type RampMessageHeader ¶
type RampMessageHeader struct { // MessageID is a unique identifier for the message, it should be unique across all chains. // It is generated on the chain that the CCIP send is requested (i.e. the source chain of a message). MessageID Bytes32 `json:"messageId"` // SourceChainSelector is the chain selector of the chain that the message originated from. SourceChainSelector ChainSelector `json:"sourceChainSelector,string"` // DestChainSelector is the chain selector of the chain that the message is destined for. DestChainSelector ChainSelector `json:"destChainSelector,string"` // SequenceNumber is an auto-incrementing sequence number for the message. // Not unique across lanes. SequenceNumber SeqNum `json:"seqNum,string"` // Nonce is the nonce for this lane for this sender, not unique across senders/lanes Nonce uint64 `json:"nonce"` // MsgHash is the hash of all the message fields. // NOTE: The field is expected to be empty, and will be populated by the plugin using the MsgHasher interface. MsgHash Bytes32 `json:"msgHash"` // populated // OnRamp is the address of the onramp that sent the message. // NOTE: This is populated by the ccip reader. Not emitted explicitly onchain. OnRamp Bytes `json:"onRamp"` }
RampMessageHeader is the family-agnostic header for OnRamp and OffRamp messages. The MessageID is not expected to match MsgHash, since it may originate from a different ramp family.
type RampTokenAmount ¶
type RampTokenAmount struct { // SourcePoolAddress is the source pool address, encoded according to source family native encoding scheme. // This value is trusted as it was obtained through the onRamp. It can be relied upon by the destination // pool to validate the source pool. SourcePoolAddress Bytes `json:"sourcePoolAddress"` // DestTokenAddress is the address of the destination token, abi encoded in the case of EVM chains. // This value is UNTRUSTED as any pool owner can return whatever value they want. DestTokenAddress Bytes `json:"destTokenAddress"` // ExtraData is optional pool data to be transferred to the destination chain. Be default this is capped at // CCIP_LOCK_OR_BURN_V1_RET_BYTES bytes. If more data is required, the TokenTransferFeeConfig.destBytesOverhead // has to be set for the specific token. ExtraData Bytes `json:"extraData"` // Amount is the amount of tokens to be transferred. Amount BigInt `json:"amount"` // DestExecData is destination chain specific execution data encoded in bytes. // For an EVM destination, it consists of the amount of gas available for the releaseOrMint // and transfer calls made by the offRamp. // NOTE: this must be decoded before providing it as an execution input to the destination chain // or hashing it. See Internal._hash(Any2EVMRampMessage) for more details as an example. DestExecData Bytes `json:"destExecData"` }
RampTokenAmount represents the family-agnostic token amounts used for both OnRamp & OffRamp messages.
type SeqNumRange ¶
type SeqNumRange [2]SeqNum
SeqNumRange defines an inclusive range of sequence numbers.
func NewSeqNumRange ¶
func NewSeqNumRange(start, end SeqNum) SeqNumRange
func (SeqNumRange) Contains ¶
func (s SeqNumRange) Contains(seq SeqNum) bool
Contains returns true if the range contains the given sequence number.
func (SeqNumRange) End ¶
func (s SeqNumRange) End() SeqNum
func (*SeqNumRange) Limit ¶ added in v0.3.0
func (s *SeqNumRange) Limit(n uint64) SeqNumRange
Limit returns a range limited up to n elements by truncating the end if necessary. Example: [1 -> 10].Limit(5) => [1 -> 5]
func (SeqNumRange) Overlaps ¶
func (s SeqNumRange) Overlaps(other SeqNumRange) bool
Overlaps returns true if the two ranges overlap.
func (*SeqNumRange) SetEnd ¶
func (s *SeqNumRange) SetEnd(v SeqNum)
func (*SeqNumRange) SetStart ¶
func (s *SeqNumRange) SetStart(v SeqNum)
func (SeqNumRange) Start ¶
func (s SeqNumRange) Start() SeqNum
func (SeqNumRange) String ¶
func (s SeqNumRange) String() string
type TokenDataEncoder ¶ added in v0.3.0
type TokenDataEncoder interface {
EncodeUSDC(ctx context.Context, message Bytes, attestation Bytes) (Bytes, error)
}
TokenDataEncoder is a generic interface for encoding offchain token data for different chain families. Right now it supports only USDC/CCTP, but every new token that requires offchain data processsing should be added to that interface and implemented in the downstream repositories (e.g. chainlink-ccip, chainlink).
type TokenPrice ¶
func NewTokenPrice ¶
func NewTokenPrice(tokenID types.Account, price *big.Int) TokenPrice