? 設置項目
? 第一份合同
? 編譯 Solidity
? 添加更多合約
? 使用 OpenZeppelin 合約
? OpenZeppelin Tutorials 教程
? Contact 聯系方式
? 設置項目
創(chuàng)建項目后的第一步是安裝開發(fā)工具。
以太坊最流行的開發(fā)框架是Hardhat,我們用ethers.js介紹了它最常見的用途。下一個最受歡迎的是使用web3.js的Truffle。每個人都有自己的長處,舒適地使用它們是很有用的。
在這些指南中,我們將展示如何使用 Truffle 和 Hardhat 開發(fā)、測試和部署智能合約。
要開始使用 Hardhat,我們將把它安裝在我們的項目目錄中。
$ npm install --save-dev hardhat
安裝好后,我們就可以運行了npx hardhat。hardhat.config.js這將在我們的項目目錄中創(chuàng)建一個 Hardhat 配置文件 ( )。
? 第一份合同
我們將 Solidity 源文件 ( .sol) 存儲在一個contracts目錄中。這相當于src您可能從其他語言中熟悉的目錄。
我們現在可以編寫我們的第一個簡單的智能合約,稱為Box:它將讓人們存儲一個可以稍后檢索的值。
我們將此文件另存為contracts/Box.sol. 每個.sol文件都應該包含單個合約的代碼,并以它命名。
// contracts/Box.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Box {
uint256 private _value;
// Emitted when the stored value changes
event ValueChanged(uint256 value);
// Stores a new value in the contract
function store(uint256 value) public {
_value = value;
emit ValueChanged(value);
}
// Reads the last stored value
function retrieve() public view returns (uint256) {
return _value;
}
}
? 編譯 Solidity
以太坊虛擬機(EVM)不能直接執(zhí)行 Solidity 代碼:我們首先需要將其編譯成 EVM 字節(jié)碼。
我們的Box.sol合約使用 Solidity 0.8,因此我們需要首先配置 Hardhat 以使用適當的 solc 版本。
我們在hardhat.config.js.
// hardhat.config.js
/**
* @type import('hardhat/config').HardhatUserConfig
*/
module.exports = {
solidity: "0.8.4",
};
然后可以通過運行單個編譯命令來實現編譯:
npx hardhat compile
Solidity 0.8.4 is not fully supported yet. You can still use Hardhat, but some features, like stack traces, might not work correctly.
Learn more at https://hardhat.org/reference/solidity-support"
Compiling 1 file with 0.8.4
Compilation finished successfully
compile內置任務將自動查找目錄中的所有合約,contracts并使用 Solidity 編譯器使用hardhat.config.js.
您會注意到artifacts創(chuàng)建了一個目錄:它包含已編譯的工件(字節(jié)碼和元數據),它們是 .json 文件。將此目錄添加到您的.gitignore.
? 添加更多合約
隨著項目的發(fā)展,您將開始創(chuàng)建更多相互交互的合約:每個合約都應該存儲在自己的.sol文件中。
為了看看這看起來如何,讓我們在我們的合約中添加一個簡單的訪問控制系統Box:我們將在名為 的合約中存儲一個管理員地址Auth,并且只讓Box那些Auth允許的帳戶使用。
因為編譯器會拾取contracts目錄和子目錄中的所有文件,所以您可以自由地組織您認為合適的代碼。在這里,我們將Auth合約存儲在一個access-control子目錄中:
// contracts/access-control/Auth.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Auth {
address private _administrator;
constructor(address deployer) {
// Make the deployer of the contract the administrator
_administrator = deployer;
}
function isAdministrator(address user) public view returns (bool) {
return user == _administrator;
}
}
跨多個合約分離關注點是保持每個合約簡單的好方法,并且通常是一種很好的做法。
但是,這不是將代碼拆分為模塊的唯一方法。您還可以在 Solidity 中使用繼承進行封裝和代碼重用,我們將在接下來看到。
? 使用 OpenZeppelin 合約
可重用的模塊和庫是偉大軟件的基石。OpenZeppelin Contracts包含許多有用的構建塊,可用于構建智能合約。在構建它們時您可以高枕無憂:它們已經過多次審計,其安全性和正確性經過實戰(zhàn)考驗。
導入 OpenZeppelin 合約
可以通過運行以下命令下載最新發(fā)布的 OpenZeppelin Contracts 庫:
$ npm install @openzeppelin/contracts
要使用 OpenZeppelin 合約之一,import它通過在其路徑前加上@openzeppelin/contracts. 例如,為了替換我們自己的Auth合約,我們將導入@openzeppelin/contracts/access/Ownable.sol以添加訪問控制Box:
// contracts/Box.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
// Import Ownable from the OpenZeppelin Contracts library
import "@openzeppelin/contracts/access/Ownable.sol";
// Make Box inherit from the Ownable contract
contract Box is Ownable {
uint256 private _value;
event ValueChanged(uint256 value);
// The onlyOwner modifier restricts who can call the store function
function store(uint256 value) public onlyOwner {
_value = value;
emit ValueChanged(value);
}
function retrieve() public view returns (uint256) {
return _value;
}
}
OpenZeppelin合約文檔是學習開發(fā)安全智能合約系統的好地方。它具有指南和詳細的 API 參考:例如,請參閱訪問控制指南以了解有關Ownable上述代碼示例中使用的合約的更多信息。
? OpenZeppelin Tutorials 教程
CN 中文 Github OpenZeppelin 教程 : github.com/565ee/OpenZeppelin_CN
CN 中文 CSDN OpenZeppelin 教程 : blog.csdn.net/wx468116118
EN 英文 Github OpenZeppelin Tutorials : github.com/565ee/OpenZeppelin_EN文章來源:http://www.zghlxwxcb.cn/news/detail-666979.html
? Contact 聯系方式
Homepage : 565.ee
微信公眾號 : wx468116118
微信 QQ : 468116118
GitHub : github.com/565ee
CSDN : blog.csdn.net/wx468116118
Email : 468116118@qq.com文章來源地址http://www.zghlxwxcb.cn/news/detail-666979.html
到了這里,關于11M 以太坊 ethereum OpenZeppelin : 開發(fā)智能合約的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!