脚本编写通用规则

前言

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