Information requests to the Foreign side
Getting information from the Foreign side with a contract call
Recent versions (6.0.0
+) of the AMB contracts allow any contract deployed on the Home chain to request and receive information from the Foreign chain asynchronously. For example, a contract on the Sokol chain can request data from the Kovan chain through the Kovan-Sokol AMB bridge, or a contract from the xDai chain can request information from Rinkeby or BSC.
Information Types
Everything that can be returned by the following JSON RPC API calls can be requested from the Foreign chain:
eth_call
eth_getStorageAt
eth_getBalance
eth_getBlockByNumber
eth_getBlockByHash
eth_getTransactionReceipt
eth_getTransactionByHash
Process
T contract that receives the information should invoke the following method of the AMB contract:
where
_requestSelector
is one of the following identifiers:0x88b6c755140efe88bff94bfafa4a7fdffe226d27d92bd45385bb0cfa90986650
foreth_call
0xed99ae50430a72b5fd8de83256893be815884aa6e59d3e25e754c5269620e964
foreth_getBalance
0x771ca5f7250ac7deadb5ecd3a00e0d901edb92aff583f55c8db58ced9a140926
foreth_getStorageAt
0x21bed3a725245055f5aa932a62078981ec55f2464167839ea001f45c839c8808
foreth_getBlockByNumber
0x31deda753ce7d0fdf0af4d4d03a69913616c4b1377be882d407fbed7cd5a7a98
foreth_getBlockByHash
0x0f47e1863d0e05e42b4a2aeee1322f349562a50b6166c14622210ade49a0b274
foreth_getTransactionReceipt
0x05c2b13240a3dff2b14abb3b793a0a5763a11c190af35bd2b5279c5bac8f2a94
foreth_getTransactionByHash
and
_data
is an ABI encoded set of arguments for the corresponding call:eth_call
:(address _to, bytes _calldata)
eth_getBalance
:(address _account)
eth_getStorageAt
:(address _contract, bytes32 _slot)
eth_getBlockByNumber
:(uint256 _number)
eth_getBlockByHash
:(bytes32 _hash)
eth_getTransactionReceipt
:(bytes32 _txhash)
eth_getTransactionByHash
:(bytes32 _txhash)
The method
requireToGetInformation
returns a message id assigned by the AMB contract for this information request.The AMB contract generates a message for the bridge oracles.
Based on the timestamp of the Home chain's block with the transaction for the information request, the oracles calculates a block number (for
eth_call
,eth_getBalance
andeth_getStorageAt
) to access the blockchain state.The oracles call the target RPC API and receive the result of the API method execution.
The oracles sends a transaction to the AMB contract with the
confirmInformation
invocation.The AMB contract invokes
onInformationReceived
of the contract which originates the information request from step 1.where
messageId
is the message id associated with the request which the information is received forstatus
is the status of the request executionresult
is ABI-encoded response of the JSON RPC node on the information request.
Available Bridges
Currently the cross-chain information requests are available on the following bridges:
ETH-xDai AMB, requests from xDai to the Ethereum Mainnet
Kovan-Sokol AMB, requests from Sokol to Kovan
Rinkeby-xDai AMB, requests from xDai to Rinkeby
BSC-xDai AMB, requests from xDai to Binance Smart Chain
ETH-BSC AMB, requests from Binance Smart Chain to the Ethereum Mainnet
Examples
The following examples use contracts deployed on the Sokol chain. The Kovan-Sokol AMB is used to demonstrate how information can be received from Kovan with transactions initiated on Sokol.
The contract 0x958671816193729054B7732c2741d93A2641138e
shows how to get the total supply of a token contract located on the Kovan chain.
Use the token contract address for the method
requestTotalSupply
Discover the message id for the information request in the method
lastMessageId
Wait for one minute (depends of number of block the oracles wait for the chain finalization)
Use the message id to check the status (it must be
2
) of the response by callingstatus
Use the message id to get the total supply of the token by calling
response
Last updated