走进科学 | 5. 使用 Remix 调用未开源合约

未开源合约需要获得合约 ABI 信息才能进行调用,获取 ABI 有三种方式:

  • 合约开源的情况下从 Etherscan 的 Code 选项中直接复制;
  • 从网页中解析出 ABI
  • 反编译合约手动构造

本文主要介绍第 2 种获取 ABI 的方法,和前面小节介绍的获取合约地址的方法一致,合约 ABI 的匹配规则为 [{"inputs",以国潮 NFT @ChinaChic_NFT https://chinachic.club/mint 为例(国潮 NFT 已开源,此处仅用于演示用途);另外不建议对未知项目的闭源合约进行调用,可能存在资产损失的风险。

图中匹配行则是完整的 ABI 代码,获取到 ABI 信息后,需要转换为可以在 Remix 操作的合约代码,Remix 是以太坊生态中的开发者工具,用于开发、调试、部署合约,也支持在浏览器端使用;打开任意网页,按下 F12 快捷键打开控制台。

// 在网页中注入 ethers 工具库
document.write('<script src="https://cdn.ethers.io/lib/ethers-5.2.umd.min.js" type="application/javascript"></script>');
// 声明 ABI,将上方查找到的 ABI 替换至 []。注意:ABI 的格式为 [{"inputs"....}]
var abi = [];
// 将 ABI 转换成可以操作的接口
new ethers.utils.Interface(abi).format(ethers.utils.FormatTypes.minimal).filter(i => i.includes('function'));

可以看到转换后的接口中,publicMint 接口是铸造 NFT 的接口。

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

contract Test {
    string public symbol;
    function publicMint () payable public {
        // do nothing
    }
}

这时,我们可以就通过 Remix 调用合约了,将上面的代码粘贴到 Remix 的代码编辑区,Remix 会自动编译合约,左侧会变成绿色的勾表示编译成功;然后选择环境为 Injected Web3,将粘贴该 NFT 合约地址 0x7BC5d353663C4c94fd022d3df0642B56C174B45c,点击 At Address 即可进行操作;可以点击 symbol 获取 NFT 名称进行确认,然后点击 publicMint 唤醒 MetaMask 弹窗执行铸造交易。

以上就是通过 Remix 的方式调用未开源的合约,但是通过人工手动铸造,效率还是很低,后续小节会介绍通过代码来监控交易和定时执行,快人一步发送交易。

关于我们

Web3Eye 是一个专注于技术研究和分享的 Web3 加密技术社区,团队拥有多年区块链研发经验和安全技术能力,以帮助更多人安全地进入 Web3 世界,欢迎关注我们的 Twitter 帐号,了解最新动态。

Subscribe to web3eye.eth
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.