一、使用Solidity编写一个简单的智能合约
在你的contracts
目录下,新建一个WavePortal.sol
的文件,请注意,在使用Hardhat
构建Dapp时,文件的目录结构非常重要。智能合约(*.sol文件)看起来类似其他语言中的class
,一个简单的智能合约内容如下:
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
import "hardhat/console.sol";
contract WavePortal {
constructor() {
console.log("Yo yo, I am a contract and I am smart");
}
}
二、运行智能合约
如上我们已经写好了一个智能合约,接下来我们要:
1.编译该合约
2.将该合约部署道本地区块链中
3.完成后其中的`console.log`方法就会运行
1.编写一个脚本来运行我们的智能合约
在scripts
目录下新建一个名为run.js
的文件,内容:
const main = async () => {
//编译智能合约,并在‘artifacts’目录下生成必要的文件
const waveContractFactory = await hre.ethers.getContractFactory("WavePortal");
//Hardhat创建一个本地以太坊网络,但只针对这个合约,在这个脚本运行结束后,该网络会销毁,所以每次
//你运行这个脚本来编译部署这个智能合约,都会是一个全新的以太坊网络环境,可以理解为刷新你的本地服
//务器
const waveContract = await waveContractFactory.deploy();
await waveContract.deployed();
//生成合约地址,根据合约地址我们才能在区块链中找到我们的智能合约
console.log("Contract deployed to:", waveContract.address);
};
const runMain = async () => {
try {
await main();
process.exit(0);
} catch (error) {
console.log(error);
process.exit(1);
}
};
runMain();
2.使用Hardhat运行脚本
使用以下命令运行脚本:
npx hardhat run scripts/run.js
你应在控制台看到以下输出:
三、完善智能合约
接下来我们要在智能合约中增加一些有趣的功能,我们希望其他人能够向我们“挥手”(Wave,可以理解为交互),而且我们能将这些“挥手”保存下来。
你可以将区块链理解为一个云服务器,比如AWS,但是它不属于任何人,它由全世界的矿机的算力支撑运行,通常我们称之为矿工,我们向他们支付gas来运行我们的代码。
一个智能合约可以理解为一段人们可以与之交互的、有多个函数的、服务器代码。我们更新我们的智能合约WavePortal.sol
来使之能保存别人给我们“挥手”。
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
import "hardhat/console.sol";
contract WavePortal {
uint256 totalWaves;
constructor() {
console.log("Yo yo, I am a contract and I am smart");
}
function wave() public {
totalWaves += 1;
console.log("%s has waved!", msg.sender);
}
function getTotalWaves() public view returns (uint256) {
console.log("We have %d total waves!", totalWaves);
return totalWaves;
}
}
总结
本文简单介绍了使用Solidity编写一个智能合约并使用Hardhat将其部署到本地以太坊网络中的过程。后续将 介绍如何完善这个合约、部署到以太坊测试网并通过web来与区块链上的合约交互。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)