# 走进科学 | 5. 使用 Remix 调用未开源合约 **Published by:** [web3eye.eth](https://paragraph.com/@web3eye/) **Published on:** 2022-03-18 **URL:** https://paragraph.com/@web3eye/5-remix ## Content 未开源合约需要获得合约 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 帐号,了解最新动态。 ## Publication Information - [web3eye.eth](https://paragraph.com/@web3eye/): Publication homepage - [All Posts](https://paragraph.com/@web3eye/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@web3eye): Subscribe to updates - [Twitter](https://twitter.com/Web3EyeLabs): Follow on Twitter