Solidity EVM区块链智能合约语言
简介:以太坊系区块链专用语言,发行代币、NFT、DApp、质押借贷、跨链合约开发
小白入门案例1:基础Hello合约
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract HelloWeb3 {
string public site = "doc.yiliancai.com";
function getMsg() public view returns(string memory){
return "亿联财Solidity区块链教程";
}
}
小白入门案例2:数字存储读写合约
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract NumStore{
uint public num;
function set(uint v) public { num = v; }
}
基础实操案例3:极简ERC20代币模板
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract SimpleToken{
mapping(address => uint) public balanceOf;
uint totalSupply = 1000000 * 1e18;
constructor(){ balanceOf[msg.sender] = totalSupply; }
function transfer(address to,uint amount) public {
require(balanceOf[msg.sender]>=amount,"余额不足");
balanceOf[msg.sender] -= amount;
balanceOf[to] += amount;
}
}
基础实操案例4:管理员白名单权限
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract WhiteList{
address public owner;
mapping(address => bool) public allow;
constructor(){ owner = msg.sender; }
modifier onlyAdmin(){ require(msg.sender==owner,"无权限"); _; }
function addWhite(address a) public onlyAdmin { allow[a]=true; }
}
进阶项目案例5:基础NFT铸造合约
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract SimpleNFT is ERC721{
uint public tokenId;
constructor() ERC721("YiLianNFT","YLC"){}
function mint() public { tokenId++; _safeMint(msg.sender,tokenId); }
}
进阶项目案例6:ETH质押锁仓合约
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract StakeLock{
struct User{ uint amount; uint lockTime; }
mapping(address => User) userInfo;
uint lockDay = 30 days;
function stake() external payable {
userInfo[msg.sender] = User({amount:msg.value,lockTime:block.timestamp+lockDay});
}
function withdraw() external {
User storage u = userInfo[msg.sender];
require(block.timestamp >= u.lockTime,"锁仓未到期");
payable(msg.sender).transfer(u.amount);
delete userInfo[msg.sender];
}
}
进阶项目案例7:多签钱包资产管理合约
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract MultiSign{
address[] public owners;
uint requiredSign;
struct Tx{ address to; uint value; bool done; uint signCnt; }
Tx[] txList;
mapping(uint => mapping(address => bool)) signedMap;
constructor(address[] memory _owners,uint _sign){ owners=_owners;requiredSign=_sign; }
}
企业精通案例8:恒定乘积AMM交易池
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract SimpleAMM{
uint reserveA; uint reserveB;
function swapAtoB(uint amountA) external {
uint amountB = reserveB - (reserveA * reserveB)/(reserveA+amountA);
reserveA += amountA; reserveB -= amountB;
}
}
企业精通案例9:持币分红收益池
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract DividendPool{
mapping(address => uint) public share;
uint totalShare; uint totalReward;
function addShare(address user,uint num) external { share[user]+=num; totalShare+=num; }
function depositReward() external payable { totalReward += msg.value; }
function claim() external {
uint reward = totalReward * share[msg.sender] / totalShare;
payable(msg.sender).transfer(reward);
}
}
企业精通案例10:跨链资产托管桥合约
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract CrossBridge{
address relayer;
mapping(bytes32 => bool) orderExec;
constructor(address r){ relayer = r; }
function lockAsset(address token,uint amount) external {}
function release(bytes32 orderId,address user,uint amount) external {
require(msg.sender==relayer && !orderExec[orderId],"校验失败");
orderExec[orderId] = true;
}
}