市值: $2.2873T -2.48%
成交额(24h): $97.8548B -16.74%
恐惧与贪婪指数:

10 - 极度恐惧

  • 市值: $2.2873T -2.48%
  • 成交额(24h): $97.8548B -16.74%
  • 恐惧与贪婪指数:
  • 市值: $2.2873T -2.48%
加密货币
话题
百科
资讯
加密话题
视频
热门加密百科

选择语种

选择语种

选择货币

加密货币
话题
百科
资讯
加密话题
视频

如何用 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-02-08 01:19:53

了解加密货币衍生品中的杠杆机制1. 杠杆允许交易者用所需资本的一小部分控制更大的头寸,从而使潜在收益和损失成倍增加。 2. 大多数加密货币交易所提供从 2 倍到 125 倍不等的分级杠杆,具体取决于资产对和账户验证级别。 3、保证金要求根据波动性动态调​​整;即使没有滑点,突然的价格飙升也会触发自动...

如何设置“一键式”倒卖交易界面?

如何设置“一键式”倒卖交易界面?

2026-02-09 22:59:56

核心架构要求1. 必须直接与交易所的订单簿源建立低延迟 WebSocket 连接,以便在 50 毫秒以下的时间间隔内接收实时买卖更新。 2. 界面必须使用 WebAssembly 或高度优化的 JavaScript 完全在浏览器内运行,以避免依赖引入路由延迟的外部后端代理。 3. 下单逻辑必须绕过 ...

如何使用一目均衡表云进行期货走势分析?

如何使用一目均衡表云进行期货走势分析?

2026-02-12 01:20:12

了解 Ichimoku 云组件1. Tenkan-sen 线计算为过去九个周期的最高点和最低点之间的中点。它反映了短期势头,通常在波动的期货市场中充当动态支撑或阻力位。 2. Kijun-sen 代表过去 26 个周期的最高点和最低点的中点。这条线作为中期基线,帮助交易者确定价格走势是否与更广泛的方...

以太坊期货重大升级前后如何交易?

以太坊期货重大升级前后如何交易?

2026-02-08 09:40:26

了解以太坊期货机制1. 以太坊期货合约是在 CME 或币安期货等受监管交易所以预定价格和日期买卖 ETH 的标准化协议。 2. 杠杆起着至关重要的作用——交易者可以用最少的资本控制大量头寸,在波动时期放大收益和损失。 3. 结算方式为现金或实物交割,具体取决于平台,大多数主要交易所均使用美元计价的现...

如何寻找高流动性货币对进行大额合约交易?

如何寻找高流动性货币对进行大额合约交易?

2026-02-08 18:20:09

寻找大额合约交易的高流动性货币对执行大额合约订单的交易者必须优先考虑流动性,以避免滑点和价格影响。低流动性环境会放大执行风险,尤其是在永续期货和反向合约中,资金费率和基差差异会加剧波动性。识别合适的配对需要超越表面体积指标的系统分析。超越交易量的流动性深度1. 交易所报告的 24 小时交易量通常包括...

如何利用“标记价”与“最新价”来防止爆仓?

如何利用“标记价”与“最新价”来防止爆仓?

2026-02-07 17:39:59

了解标记价格机制1、标记价格是多个现货交易所指数和资金费率调整得出的综合值,旨在反映永续合约的公平市场价值。 2. 整合了Binance、Coinbase、Kraken、Bybit等领先现货市场的实时数据,以降低低流动性时期的操纵风险。 3. 资金费率部分确保标记价格随着时间的推移与基础现货价格趋同...

如何安全地最大化当日交易加密货币的杠杆?

如何安全地最大化当日交易加密货币的杠杆?

2026-02-08 01:19:53

了解加密货币衍生品中的杠杆机制1. 杠杆允许交易者用所需资本的一小部分控制更大的头寸,从而使潜在收益和损失成倍增加。 2. 大多数加密货币交易所提供从 2 倍到 125 倍不等的分级杠杆,具体取决于资产对和账户验证级别。 3、保证金要求根据波动性动态调​​整;即使没有滑点,突然的价格飙升也会触发自动...

如何设置“一键式”倒卖交易界面?

如何设置“一键式”倒卖交易界面?

2026-02-09 22:59:56

核心架构要求1. 必须直接与交易所的订单簿源建立低延迟 WebSocket 连接,以便在 50 毫秒以下的时间间隔内接收实时买卖更新。 2. 界面必须使用 WebAssembly 或高度优化的 JavaScript 完全在浏览器内运行,以避免依赖引入路由延迟的外部后端代理。 3. 下单逻辑必须绕过 ...

如何使用一目均衡表云进行期货走势分析?

如何使用一目均衡表云进行期货走势分析?

2026-02-12 01:20:12

了解 Ichimoku 云组件1. Tenkan-sen 线计算为过去九个周期的最高点和最低点之间的中点。它反映了短期势头,通常在波动的期货市场中充当动态支撑或阻力位。 2. Kijun-sen 代表过去 26 个周期的最高点和最低点的中点。这条线作为中期基线,帮助交易者确定价格走势是否与更广泛的方...

以太坊期货重大升级前后如何交易?

以太坊期货重大升级前后如何交易?

2026-02-08 09:40:26

了解以太坊期货机制1. 以太坊期货合约是在 CME 或币安期货等受监管交易所以预定价格和日期买卖 ETH 的标准化协议。 2. 杠杆起着至关重要的作用——交易者可以用最少的资本控制大量头寸,在波动时期放大收益和损失。 3. 结算方式为现金或实物交割,具体取决于平台,大多数主要交易所均使用美元计价的现...

如何寻找高流动性货币对进行大额合约交易?

如何寻找高流动性货币对进行大额合约交易?

2026-02-08 18:20:09

寻找大额合约交易的高流动性货币对执行大额合约订单的交易者必须优先考虑流动性,以避免滑点和价格影响。低流动性环境会放大执行风险,尤其是在永续期货和反向合约中,资金费率和基差差异会加剧波动性。识别合适的配对需要超越表面体积指标的系统分析。超越交易量的流动性深度1. 交易所报告的 24 小时交易量通常包括...

如何利用“标记价”与“最新价”来防止爆仓?

如何利用“标记价”与“最新价”来防止爆仓?

2026-02-07 17:39:59

了解标记价格机制1、标记价格是多个现货交易所指数和资金费率调整得出的综合值,旨在反映永续合约的公平市场价值。 2. 整合了Binance、Coinbase、Kraken、Bybit等领先现货市场的实时数据,以降低低流动性时期的操纵风险。 3. 资金费率部分确保标记价格随着时间的推移与基础现货价格趋同...

查看所有文章

User not found or password invalid

Your input is correct