WEB3 Day4—Solidity基础[part3]

WEB3 Day4—Solidity基础[part3]
SoniaChenWEB3 Day4—Solidity基础[part3]
智能合约部署 Smart Contracts Deploying
Sepolia TestNet deploying
我们可以通过进入部署选项卡,从本地虚拟环境(Remix VM)切换到注入的提供者 - MetaMask 来开始部署过程。这一操作将允许Remix发送请求并与您的MetaMask账户进行交互。
随后系统会提示你去选择一个账号。 在你成功连接到remix之后,你会看到账号已经成功链接到并且正在使用sepolia网络的信息。
注意,需要你的测试网络里面必须有足够的 sepolia ETH,如果没有需要从水龙头获取,免费的水龙头我这边会集中收集一次,后续可点击这篇文章:【TODO 挖个坑】;
暂时可以去这里faucet, 但是还是需要主账户里面要有ether。
随后,MetaMask就会要求你在测试网站上签署发送:
交易执行之后,合约地址会将交易详情一同显示在已部署的合约列表下面。这就是Eherscan上部署交易的显示方式。
合约交互 Contract interaction
合约部署完成以后,我们可以与之交互并更新区块链。例如,如果想存储一个数字,可以通过点击store按钮实现;MetaMask会要求再次确认交易。然后更行您设置的数字。这些交易都可以通过部署地址在etherscan上面查询查看。
Zksync部署
由于以太坊主网合约部署成本比较高昂,所以RollUp和Layer2网络等扩容解决方案更佳,需要掌握部署在Zksync的流程。
首先需要Zksync的测试网基金以及zkSync的跨链桥
可参照之前的笔记 WEB3 Day2 —— BlockChain Basic 2
然后步骤和上面主网的测试网络部署相似,只不过需要跨链
- 连接钱包
- 需要将Sepolia ETH跨链到zkSync,Zksync Bridge地址
- 连接钱包,保证网络在sepolia
- 从sepolia测试网发送eth到zksync
-
有测试基金以后,需要将remixIDE 下载zksync的插件
-
⚠️ zkSync部署版本要求 ‘0.8.24’,并且合约
*.sol
文件必须放在一个contracts
文件夹中,不然Zksyn插件的deploy标签页可能会显示空白 -
编译——>连接钱包——> 部署
合约之间如何相互部署以及交互
通过import进行导入另一个合约
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
import "./SimpleStorage.sol";
contract StorageFacotory {
SimpleStorage public simpleStorage;
function createSimpleStorageContract() public {
simpleStorage = new SimpleStorage();
}
}
如果导入文件有多个合约,一般import最好声明具体的名称,可以不用导入该文件的所有合约
import {SimpleStorage, SimpleStorage2} from "./SimpleStorage.sol";
调用另外一个合约的ABI[application binary interface]
可以创造一个SimpleStorage的数组来存储所有创建的simpleStorage的地址,然后通过地址去调用特定的simplestorage的函数
pragma solidity ^0.8.19;
import {SimpleStorage} from "./SimpleStorage.sol";
contract StorageFacotory {
SimpleStorage[] public listOfSimpleStorage;
// 创建需要的SimpleStorage
function createSimpleStorageContract() public {
SimpleStorage simpleStorage = new SimpleStorage();
listOfSimpleStorage.push(simpleStorage);
}
// 调用simpleStorage的store函数
function sfStore(uint256 _index, uint256 myFavoriteNumber) public{
listOfSimpleStorage[_index].store(myFavoriteNumber);
}
// 调用simpleStorage里面的recive函数
function sfRecive(uint256 _index) public view returns (uint256) {
return listOfSimpleStorage[_index].recive();
}
}

继承和重写
创建继承自 SimpleStorage.sol
的新合约 AddFiveStorage.sol
,并通过重写函数实现功能扩展。
SimpleStorage.sol
代码
- virtual 表示原函数可以被继承
function store(uint256 favoriteNumber) public virtual {// 存储
myFavoriteNumber = favoriteNumber;
}
AddFiveStorage.sol
代码
// SPDX-License-Identifier:MIT
pragma solidity ^0.8.18;
import {SimpleStorage} from "./SimpleStorage.sol";
contract AddFiveStorage is SimpleStorage {
// 需要override关键字 原函数需要加上virtual函数
function store(uint256 favoriteNumber) public override {// 存储
myFavoriteNumber = favoriteNumber + 5;
}
}
- is 表示继承
- override 关键字表示重写