脚本编写通用规则
前言
dapp脚本和合约脚本有少部分地方不同:
比如dapp脚本必须配置mock信息,合约脚本则不需要;
dapp的脚本url为框架网址是脚本初始启动时候的网址,合约脚本的网址基本固定为
https://www.fishx.xyz/contract.html
但二者大部分地方是相同的,此处展示一个常见的合约脚本作为讲解:
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 send({
to: "0xe5E30E7c24e4dFcb281A682562E53154C15D3332",
data: `0x9f8420b3${encodeEther(getInput("amount", context),)}0000000000000000000000000000000000000000000000000000000000009c40`,
value: `${hexOfEtherSum(getInput("amount", context),"0.00000004",)}`
})
}
};
标准结构:
name
名称,要求具有唯一性,同名会被覆盖。
runScript中使用name进行脚本跳转运行。
desc
描述,方便备注脚本具体作用。
category
分组。同一分组的脚本以下拉形式展示在网站。
type
类别。目前分两个类别,dapp脚本和contract脚本。
dapp脚本会出现调试界面,自动化调试框架窗口运行。dapp脚本必须设置此字段为dapp
contract脚本建议设置成contract
url
框架页面。
dapp脚本为框架的初始执行页面,从此页面开始执行脚本。
contract脚本为固定,目前必须设置为https://www.fishx.xyz/contract.html
inputs
输入框,接受输入变量,可以设置多个,多个时采用逗号分隔。
单个变量如例子所示,会显示一个amount的输入框:
inputs: {amount: {type: "number",range: true}},
随后所及主体内用下面代码获取到输入值:
getInput('amount',context)
逻辑结构主体
logic: async (context) => {
}
建议用如上所示,默认的。
这样首先是异步执行,接受一个参数context。后续再从context中用
getInput('amount',context)
获取具体哪个输入值。
逻辑体内:切换钱包
must(changeAccount);
此代码基本为必有,有此代码才会切换钱包,达到批量执行。
逻辑体内:指定链ID
await request({method:'wallet_switchEthereumChain',params:[{chainId:42161}]});
示例为切换到42161,即arb链。
建议合约脚本均在执行前添加此代码,dapp脚本不支持,dapp脚本执行前必须钱包切换到对应链。
逻辑体内:跳转运行其他脚本
inputs: { amount: { type: "number", range: true } },
logic: async (context) => {
must(changeAccount);
const ctx = {inputs: {amount: {value: getInput("amount", context)}}};
await runScript("SyncSwapETH2USDTScroll-Lib", ctx);
}
示例是获取一个参数,跳转到SyncSwapETH2USDTScroll-Lib脚本运行,并传递参数进去。
runScript后更脚本name。
逻辑体内:强制结束
cache.done
我们的代码必须检测到上链成功才会切换钱包地址,执行下一个,否则会重复执行。如果不需要上链动作,可以用此代码强制结束。
其他支持:
支持全部js语法
支持ethers.js
支持axios
Last updated