-
bitcoin $87959.907984 USD
1.34% -
ethereum $2920.497338 USD
3.04% -
tether $0.999775 USD
0.00% -
xrp $2.237324 USD
8.12% -
bnb $860.243768 USD
0.90% -
solana $138.089498 USD
5.43% -
usd-coin $0.999807 USD
0.01% -
tron $0.272801 USD
-1.53% -
dogecoin $0.150904 USD
2.96% -
cardano $0.421635 USD
1.97% -
hyperliquid $32.152445 USD
2.23% -
bitcoin-cash $533.301069 USD
-1.94% -
chainlink $12.953417 USD
2.68% -
unus-sed-leo $9.535951 USD
0.73% -
zcash $521.483386 USD
-2.87%
如何用 Solidity 编写你的第一个智能合约? (分步教程)
Set up Node.js, Truffle, and Ganache; write an ERC-20 token using OpenZeppelin; compile, deploy locally, and test via Truffle console and JavaScript.
2026/01/17 00:00
设置开发环境
1. 安装 Node.js 和 npm 以管理 Solidity 工具所需的依赖项。
2. 使用npm在全球范围内安装Truffle——一种广泛采用的基于以太坊的智能合约开发框架。
3、安装Ganache作为个人区块链进行本地测试;它为私人账户提供预先充值的 ETH。
4. 使用truffle init配置一个新的 Truffle 项目以生成基本目录,例如contracts/ 、 migrations/和test/ 。
5. 通过运行truffle 版本并确认与 Solidity 编译器 v0.8.x 或更高版本的兼容性来验证安装完整性。
编写基本的代币合约
1. 在contracts/文件夹中创建一个名为MyToken.sol的新文件。
2.声明Solidity版本编译指示:编译指示solidity ^0.8.20;以确保确定性的编译行为。
3.导入OpenZeppelin的ERC-20实现: import '@openzeppelin/contracts/token/ERC-20/ERC-20.sol';
4. 定义合约继承:合约MyToken为ERC20 { ... }并在构造函数中初始化名称、符号和总供应量。
5. 使用 OpenZeppelin 的 AccessControl 库中的onlyOwner修饰符添加仅限所有者的 mint 函数。
编译和部署合约
1. 在migrations/2_deploy_contracts.js中编写迁移脚本,实例化并部署100万个代币的MyToken 。
2.运行trufflecompile生成ABI和字节码;确认没有出现语法或版本不匹配错误。
3. 启动 Ganache 并将其 RPC 服务器 URL(例如,http://127.0.0.1:7545)复制到开发网络下的truffle-config.js中。
4. 执行truffle migrate --networkdevelopment部署合约并记录交易哈希值和合约地址。
5. 通过检查 Ganache 的事务日志并验证控制台输出中出现的合约地址来确认部署成功。
通过 Truffle 控制台进行交互
1. 启动连接到 Ganache 的 Truffle 控制台: truffle console --networkdevelopment 。
2. 获取已部署的实例: let instance = wait MyToken.deployed();
3. 使用(await instance.totalSupply()).toString()查询总供应量 — 期望输出与初始薄荷值匹配。
4. 账户间转账: await instance.transfer('0xAb8483F64d9C6d1EcF9b849Ae677dC320f55a1B5', '1000') 。
5. 使用(await instance.balanceOf('0xAb8483F64d9C6d1EcF9b849Ae677dC320f55a1B5')).toString()验证余额更改。
使用 JavaScript 进行测试
1. 创建test/mytoken.js ,其中包含核心功能的 Mocha 风格测试用例。
2. 使用contract()定义测试上下文,并使用it()块来断言铸造、传输和事件发射等行为。
3. 调用transfer 后,使用assert.equal(receipt.logs[0].event, 'Transfer')断言正确的事件日志。
4. 测试恢复条件:尝试传输超过余额的内容,并使用ExpectRevert实用程序验证是否引发恢复。
5. 使用truffle test运行测试,并确认所有断言都通过,没有超时或运行时异常。
常见问题解答
问:我可以在不使用 Truffle 的情况下部署 Solidity 合约吗?答:是的。替代方案包括 Hardhat、Remix IDE 或使用编译的字节码和 ABI 直接调用 web3.js。
问:如果我忘记了接收 ETH 的函数中的payable关键字,会发生什么情况?答:该函数将恢复任何尝试发送 ETH 的交易,从而导致执行失败和 Gas 消耗。
问:使用tx.origin进行访问控制安全吗?答:不行。 tx.origin可以通过网络钓鱼合约进行操纵,并且绝不能在权限检查中替换msg.sender 。
问:如何在 Etherscan 上验证我的合约源代码?答:通过 Etherscan 的验证表单提交准确的 Solidity 源代码、编译器版本、优化设置和构造函数参数。
免责声明:info@kdj.com
所提供的信息并非交易建议。根据本文提供的信息进行的任何投资,kdj.com不承担任何责任。加密货币具有高波动性,强烈建议您深入研究后,谨慎投资!
如您认为本网站上使用的内容侵犯了您的版权,请立即联系我们(info@kdj.com),我们将及时删除。
- 香港崛起:稳定币许可和加密货币监管成为焦点
- 2026-01-31 00:55:01
- 白银市场的挤压:产能、供应以及日益增加的问题的解决
- 2026-01-31 00:55:01
- 特朗普的美联储主席人选:凯文·沃什上任,华尔街观察
- 2026-01-30 22:10:06
- 随着市场变化和新加密货币的兴起,比特币的数字黄金梦想受到考验
- 2026-01-30 22:10:06
- 币安双倍下注:SAFU基金完全转向比特币,表明深信不疑
- 2026-01-30 22:05:01
- 雪佛龙第四季度业绩显示,尽管收入不足,但每股收益仍超预期,着眼于未来增长
- 2026-01-30 22:05:01
相关百科
如何使用LayerZero合约执行跨链消息?
2026-01-18 13:19:39
了解 LayerZero 架构1. LayerZero 作为一种轻量级、无需许可的互操作性协议运行,无需依赖可信中介或包装资产即可实现区块链之间的通信。 2. 它利用部署在每条链上的超轻节点(ULN)来验证消息的完整性和一致性,而无需存储完整的区块链状态。 3. 核心组件包括处理消息路由的 Endp...
如何实施EIP-712进行安全签名验证?
2026-01-20 22:20:26
EIP-712 概述和核心目的1. EIP-712 定义了以太坊应用程序中类型化结构化数据哈希和签名的标准。 2. 它使钱包能够在签名请求期间显示人类可读的域和消息字段,而不是原始的十六进制字符串。 3. 该规范通过域分隔符哈希引入域分离,防止跨不同 dApp 或链的签名重放。 4. 每个签名的有效...
如何通过新合约交互获得空投资格?
2026-01-24 21:00:23
了解合约交互要求1. 大多数空投活动都要求与部署在受支持的区块链(例如以太坊、Arbitrum 或 Base)上的智能合约进行直接交互。 2. 交互通常涉及使用连接到 dApp 接口的钱包执行诸如approve() 、 stake()或mint()之类的函数。 3. 某些协议需要多种交易类型,例如将...
如何监控智能合约的安全警报?
2026-01-21 07:59:57
链上监控工具1. Etherscan和Blockscout等区块链浏览器允许实时检查合约字节码、交易日志和内部调用。 2. 在信任任何链上数据之前必须确认合约验证状态——未经验证的合约存在高风险。 3. 事件日志解析可以检测异常状态变化,例如意外的代币转移或所有权修改。 4. 可以针对特定事件签名设...
如何建立自动支付合同并为其提供资金?
2026-01-26 08:59:35
了解智能合约部署1. 开发者必须根据gas效率和安全性要求选择兼容的区块链平台,例如以太坊、Polygon或Arbitrum。 2. Solidity 仍然是编写支付自动化逻辑的主要语言,特别是对于定期或有条件的转账。 3. 在主网部署之前,使用 Hardhat 或 Foundry 等本地开发环境来...
如何使用 OpenZeppelin 合约构建安全的 dApp?
2026-01-18 11:19:49
了解 OpenZeppelin 合约基础知识1. OpenZeppelin Contracts 是一个可重用、经过社区审核的智能合约组件库,专为以太坊和 EVM 兼容的区块链而构建。 2. 库中的每个合约都遵循严格的安全实践,包括遵守“检查-效果-交互”模式以及广泛使用访问控制修饰符。 3. 该库提...
如何使用LayerZero合约执行跨链消息?
2026-01-18 13:19:39
了解 LayerZero 架构1. LayerZero 作为一种轻量级、无需许可的互操作性协议运行,无需依赖可信中介或包装资产即可实现区块链之间的通信。 2. 它利用部署在每条链上的超轻节点(ULN)来验证消息的完整性和一致性,而无需存储完整的区块链状态。 3. 核心组件包括处理消息路由的 Endp...
如何实施EIP-712进行安全签名验证?
2026-01-20 22:20:26
EIP-712 概述和核心目的1. EIP-712 定义了以太坊应用程序中类型化结构化数据哈希和签名的标准。 2. 它使钱包能够在签名请求期间显示人类可读的域和消息字段,而不是原始的十六进制字符串。 3. 该规范通过域分隔符哈希引入域分离,防止跨不同 dApp 或链的签名重放。 4. 每个签名的有效...
如何通过新合约交互获得空投资格?
2026-01-24 21:00:23
了解合约交互要求1. 大多数空投活动都要求与部署在受支持的区块链(例如以太坊、Arbitrum 或 Base)上的智能合约进行直接交互。 2. 交互通常涉及使用连接到 dApp 接口的钱包执行诸如approve() 、 stake()或mint()之类的函数。 3. 某些协议需要多种交易类型,例如将...
如何监控智能合约的安全警报?
2026-01-21 07:59:57
链上监控工具1. Etherscan和Blockscout等区块链浏览器允许实时检查合约字节码、交易日志和内部调用。 2. 在信任任何链上数据之前必须确认合约验证状态——未经验证的合约存在高风险。 3. 事件日志解析可以检测异常状态变化,例如意外的代币转移或所有权修改。 4. 可以针对特定事件签名设...
如何建立自动支付合同并为其提供资金?
2026-01-26 08:59:35
了解智能合约部署1. 开发者必须根据gas效率和安全性要求选择兼容的区块链平台,例如以太坊、Polygon或Arbitrum。 2. Solidity 仍然是编写支付自动化逻辑的主要语言,特别是对于定期或有条件的转账。 3. 在主网部署之前,使用 Hardhat 或 Foundry 等本地开发环境来...
如何使用 OpenZeppelin 合约构建安全的 dApp?
2026-01-18 11:19:49
了解 OpenZeppelin 合约基础知识1. OpenZeppelin Contracts 是一个可重用、经过社区审核的智能合约组件库,专为以太坊和 EVM 兼容的区块链而构建。 2. 库中的每个合约都遵循严格的安全实践,包括遵守“检查-效果-交互”模式以及广泛使用访问控制修饰符。 3. 该库提...
查看所有文章














