合约脚本编写
常用最简合约脚本demo:
FishxScript = {
name: "脚本名称",
desc: "脚本简介",
category: "脚本分组",
type: "contract",
url: "https://www.fishx.xyz/contract.html",
inputs: { amount: { type: "number", range: true } },
logic: async (context) => {
must(changeAccount);
await request({method: "wallet_switchEthereumChain",params: [{ chainId: 324 }],});
await send(
{
to:sender,
value:parseEther(getInput('amount',context)),
}
);
}
};
此脚本解读:
引入一个输入框amount。用户输入一个金额范围。比如0.01-0.03,每次执行会生成一个随机值。
用getInput('amount',context)获取到这个随机值,用
parseEther()转换为wei格式,传入value。
must(changeAccount);切换钱包。
await request({method: "wallet_switchEthereumChain",params: [{ chainId: 324 }],});
切换到324链执行。
此脚本为zksync网络转账脚本,收款人为sender。也即钱包自身。
parseEther同ethers.parseEther,我们做了内置简化。
sender为当前脚本连接地址,这些内置变量或函数稍后会详细介绍。
合约脚本改写技巧:
ethers.js写成的合约交互脚本可以很方便的改写过来,常规代码前置的连接provider,最后的提交签名或者交易数据均不需要。
因为我们签名时提交到钱包签名,因此其他遇到provider,singer等代码时候注意改写。
除此之外,我们内置了很多简化的变量和函数。
简化:
parseEther同ethers.parseEther
formatEther同ethers.formatEther
parseUnits同ethers.parseUnits
formatUnits同ethers.formatUnits
内置变量或方法:
sender
当前脚本连接的钱包地址
balance()
查询余额,等同于provider.getBalance()
例如:
const balance_eth = await balance(sender);
内置erc20等合约abi
IERC20(token_address)
返回创建一个erc20合约
例如:
const usdc = '0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4';
const contract_usdc = await IERC20(usdc);
同理
IERC721(token_address);
创建一个erc721合约
IERC1155(token_address);
创建一个erc1155合约
contract(contract_address,abi)
创建合约,可签名。等同于new Contract(contract_address,abi,singer);
例如:
const routerAddress = '0X000000000000000'
const router_abi='[{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"fee","type":"uint256"}],"stateMutability":"view","type":"function"}]';
const router = await contract(routerAddress,router_abi);
Last updated