-
Notifications
You must be signed in to change notification settings - Fork 49
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
9 changed files
with
169 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,45 @@ | ||
# ZetaChain Contracts Template | ||
# Hello Example | ||
|
||
## Getting Started | ||
``` | ||
yarn deploy | ||
``` | ||
|
||
## EVM | ||
|
||
Successful call: | ||
|
||
``` | ||
npx hardhat call-from-evm --contract 0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E --receiver 0x67d269191c92Caf3cD7723F116c85e6E9bf55933 --network localhost --types '["string"]' hello | ||
``` | ||
|
||
Failed call: | ||
|
||
``` | ||
npx hardhat call-from-evm --contract 0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E --receiver 0x67d269191c92Caf3cD7723F116c85e6E9bf55933 --network localhost --types '["uint256"]' 42 | ||
``` | ||
|
||
Install dependencies: | ||
Failed call with handled revert: | ||
|
||
``` | ||
yarn | ||
npx hardhat call-from-evm --contract 0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E --receiver 0x67d269191c92Caf3cD7723F116c85e6E9bf55933 --network localhost --revert-address 0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E --revert-message 0x --call-on-revert --types '["uint256"]' 42 | ||
``` | ||
|
||
## Next Steps | ||
## ZetaChain | ||
|
||
Ready to dive in? Follow our [**🚀 smart contract | ||
tutorials**](https://www.zetachain.com/docs/developers/tutorials/intro/) to | ||
start building universal app contracts. | ||
Successful call: | ||
|
||
``` | ||
npx hardhat call-from-zetachain --contract 0x67d269191c92Caf3cD7723F116c85e6E9bf55933 --receiver 0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E --zrc20 0x2ca7d64A7EFE2D62A725E2B35Cf7230D6677FfEe --function "hello(string)" --network localhost --types '["string"]' hello | ||
``` | ||
|
||
Failed call: | ||
|
||
``` | ||
npx hardhat call-from-zetachain --contract 0x67d269191c92Caf3cD7723F116c85e6E9bf55933 --receiver 0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E --zrc20 0x2ca7d64A7EFE2D62A725E2B35Cf7230D6677FfEe --function "hello(string)" --network localhost --types '["uint256"]' 42 | ||
``` | ||
|
||
Failed call with handled revert: | ||
|
||
``` | ||
npx hardhat call-from-zetachain --contract 0x67d269191c92Caf3cD7723F116c85e6E9bf55933 --receiver 0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E --zrc20 0x2ca7d64A7EFE2D62A725E2B35Cf7230D6677FfEe --function "hello(string)" --network localhost --revert-address 0x67d269191c92Caf3cD7723F116c85e6E9bf55933 --revert-message 0x --call-on-revert --types '["uint256"]' 42 | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,11 +2,18 @@ | |
pragma solidity 0.8.26; | ||
|
||
import {RevertContext} from "@zetachain/protocol-contracts/contracts/Revert.sol"; | ||
import "@zetachain/protocol-contracts/contracts/evm/GatewayEVM.sol"; | ||
|
||
contract Echo { | ||
GatewayEVM public gateway; | ||
Check warning Code scanning / Slither State variables that could be declared immutable Warning
Echo.gateway should be immutable
|
||
|
||
contract Revert { | ||
event RevertEvent(string, RevertContext); | ||
event HelloEvent(string, string); | ||
|
||
constructor(address payable gatewayAddress) { | ||
gateway = GatewayEVM(gatewayAddress); | ||
} | ||
|
||
function hello(string memory message) external { | ||
emit HelloEvent("Hello on EVM", message); | ||
} | ||
|
@@ -15,6 +22,14 @@ contract Revert { | |
emit RevertEvent("Revert on EVM", revertContext); | ||
} | ||
|
||
function gatewayCall( | ||
address receiver, | ||
bytes calldata message, | ||
RevertOptions memory revertOptions | ||
) external { | ||
gateway.call(receiver, message, revertOptions); | ||
} | ||
|
||
receive() external payable {} | ||
|
||
fallback() external payable {} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
import { task, types } from "hardhat/config"; | ||
import type { HardhatRuntimeEnvironment } from "hardhat/types"; | ||
|
||
const main = async (args: any, hre: HardhatRuntimeEnvironment) => { | ||
const { ethers } = hre; | ||
const [signer] = await ethers.getSigners(); | ||
|
||
const txOptions = { | ||
gasPrice: args.txOptionsGasPrice, | ||
gasLimit: args.txOptionsGasLimit, | ||
}; | ||
|
||
const revertOptions = { | ||
abortAddress: "0x0000000000000000000000000000000000000000", // not used | ||
callOnRevert: args.callOnRevert, | ||
onRevertGasLimit: args.onRevertGasLimit, | ||
revertAddress: args.revertAddress, | ||
revertMessage: ethers.utils.hexlify( | ||
ethers.utils.toUtf8Bytes(args.revertMessage) | ||
), | ||
}; | ||
|
||
const types = JSON.parse(args.types); | ||
|
||
const valuesArray = args.values.map((value: any, index: number) => { | ||
const type = types[index]; | ||
|
||
if (type === "bool") { | ||
try { | ||
return JSON.parse(value.toLowerCase()); | ||
} catch (e) { | ||
throw new Error(`Invalid boolean value: ${value}`); | ||
} | ||
} else if (type.startsWith("uint") || type.startsWith("int")) { | ||
return ethers.BigNumber.from(value); | ||
} else { | ||
return value; | ||
} | ||
}); | ||
const encodedParameters = ethers.utils.defaultAbiCoder.encode( | ||
types, | ||
valuesArray | ||
); | ||
|
||
const gasLimit = hre.ethers.BigNumber.from(args.gasLimit); | ||
|
||
const factory = (await hre.ethers.getContractFactory(args.name)) as any; | ||
const contract = factory.attach(args.contract); | ||
|
||
const tx = await contract.gatewayCall( | ||
args.receiver, | ||
encodedParameters, | ||
revertOptions, | ||
txOptions | ||
); | ||
|
||
console.log(`Transaction hash: ${tx.hash}`); | ||
await tx.wait(); | ||
console.log("gatewayCall executed successfully"); | ||
}; | ||
|
||
task("call-from-evm", "Calls the gateway on a contract on EVM", main) | ||
.addParam("contract", "The address of the deployed contract") | ||
.addOptionalParam( | ||
"gasLimit", | ||
"Gas limit for for a cross-chain call", | ||
7000000, | ||
types.int | ||
) | ||
.addOptionalParam( | ||
"txOptionsGasPrice", | ||
"The gas price for the transaction", | ||
10000000000, | ||
types.int | ||
) | ||
.addOptionalParam( | ||
"txOptionsGasLimit", | ||
"The gas limit for the transaction", | ||
7000000, | ||
types.int | ||
) | ||
.addFlag("callOnRevert", "Whether to call on revert") | ||
.addOptionalParam( | ||
"revertAddress", | ||
"Revert address", | ||
"0x0000000000000000000000000000000000000000" | ||
) | ||
.addOptionalParam("revertMessage", "Revert message", "0x") | ||
.addParam( | ||
"receiver", | ||
"The address of the receiver contract on a connected chain" | ||
) | ||
.addOptionalParam( | ||
"onRevertGasLimit", | ||
"The gas limit for the revert transaction", | ||
7000000, | ||
types.int | ||
) | ||
.addParam("name", "The name of the contract", "Echo") | ||
.addParam("types", `The types of the parameters (example: '["string"]')`) | ||
.addVariadicPositionalParam("values", "The values of the parameters"); | ||
|
||
module.exports = {}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -59,4 +59,4 @@ | |
"@zetachain/protocol-contracts": "10.0.0-rc10", | ||
"@zetachain/toolkit": "13.0.0-rc4" | ||
} | ||
} | ||
} |