dapp脚本编写

常用最简dapp脚本demo:

FishxScript = {
    name: "脚本名",
    desc: "脚本简介",
    category: "脚本分组",
    type: "dapp",
    url: "脚本执行初始地址",
    mockBlock: "0x000000000000000000000000000000000000000000000000000000000000000",
    mockTx: "0x000000000000000000000000000000000000000000000000000000000000000",
    inputs: { 金额: { type: "number", range: true } },
    logic: async (context) => {
        must(changeAccount);
        console.log('hello word');
    },
};

常用方法:

click

点击。

例如,点击左下角:

await click("left,bottom");

例如,点击对应selector的元素:

await click("#swap-box button.swap-confirm");

focus

选中。

例如,输入框前先选中代替清空

await focus("#swap-input div.row input");

typeIn

输入。

例如,输入输入框中用户输入的金额;

await typeIn(getInput("金额",context));

waitFor

延时。

例如,延时1000毫秒:

await waitFor(1000);

完整demo示例:

syncswap的swap功能(mock为scroll测试网):

{
        name: "SyncSwap-D",
        desc: "dapp交互",
        category: "D-dexes",
        type: "dapp",
        url: "https://syncswap.xyz/",
        mockBlock:
            "0x570d42d58bf59b115e184d4d1eb990670d81e7f91d675bd19adb756786c90ed2",
        mockTx: "0x881b2f5265238225907e865f328e42d2984a88a840132a903f2135ba715bb8e9",
        inputs: { 金额: { type: "number", range: true } },
        logic: async (context) => {
            must(changeAccount);
            await click("left,bottom");
            await waitFor(200);
            await focus("#swap-input div.row input");
            await typeIn(getInput("金额",context));
            await waitFor(1000);
            await click("#swap-box button.swap-confirm");
        },
    }

scroll官方跨链桥(mock为scroll测试网):

{
        name: "ScrollDepositETH-D",
        desc: "dapp交互",
        category: "D-跨链",
        type: "dapp",
        url: "https://scroll.io/bridge",
        network: 5,
        mockBlock: "0x7480fe62c855d86d91016764a2aa07374b17bc3213e9285ed13420875dc7da0c",
        mockTx: "0xdb58a3010e17b83f042b9de3cc1434f935eaa44dbf45f6783d4c6702789c8bb8",
        inputs: {
            金额: {
                type: "number",
                range: true
            }
        },
        logic: async (context) => {
            must(changeAccount)
            await waitFor(200)
            await click("right,buttom")
            await focus("#\\:r0\\:")
            await typeIn(getInput("金额",context))
            await click("#\\:r2\\:")
            await waitFor(200)
            await click("#\\:r4\\: > div > button")
        }
    }

如何寻找selector:

1、开发者工具直接复制:

在网页对应位置,右键“检查”,弹出开发者工具,并且定位到对应元素位置。右键,复制,复制对应selector。是最简单的获取selector的方法。

2、学习css选择器知识:

例如https://www.w3school.com.cn/css/css_selectors.asp

dapp脚本快速开发技巧:

有一些操作比较复杂,比如下拉选择等,还有一些无用的前置动作,比如需要把页面调整到某个合适开始的位置。

以上动作,我们都不建议去编写代码解决。应该调整到合适的位置后,开始编写代码(比如代币交换,常常需要选择合适的代币后开始)

因为我们的页面调整到合适位置后,后续重复动作,切换钱包地址,网页并不刷新,因此页面除此外均无变化。

mock解释与查找:

mock的引入,是为了达到快速确认目的。

mock必须填写正确。

同一个功能,不同链的mock信息不一样。

mock包含mockBlock与mockTx

一个是区块hash,一个是具体交易hash。

例如scroll跨链脚本中,我们找到同一合约过去成功的tx,任意一个即可。

比如:https://goerli.etherscan.io/tx/0xdb58a3010e17b83f042b9de3cc1434f935eaa44dbf45f6783d4c6702789c8bb8

此处0xdb58a3010e17b83f042b9de3cc1434f935eaa44dbf45f6783d4c6702789c8bb8即为mockhash

然后看到此交易属于9356174区块,点击此区块号,进入https://goerli.etherscan.io/block/9356174

点击‘查看更多’,获取到此区块的hash为:0x7480fe62c855d86d91016764a2aa07374b17bc3213e9285ed13420875dc7da0c

即为mockBlock

Last updated