Solidity 是 Ethereum 区块链上使用的一种编程语言,用于编写智能合约。以下是一些 Solidity 智能合约的示例,供学习和参考。
示例 1:简单的存储合约
这个合约示例用于存储一个值,并允许任何人读取它。
pragma solidity ^0.8.0;
contract SimpleStorage {
uint256 public storedData;
function set(uint256 x) public {
storedData = x;
}
function get() public view returns (uint256) {
return storedData;
}
}
示例 2:发送以太坊
这个合约示例允许用户发送以太坊到另一个地址。
pragma solidity ^0.8.0;
contract SendEther {
function sendEther(address payable _to) public payable {
_to.transfer(msg.value);
}
}
示例 3:多重签名钱包
这个合约示例实现了一个多重签名钱包,需要两个或多个私钥才能进行转账。
pragma solidity ^0.8.0;
contract MultiSigWallet {
address[] public owners;
mapping(address => bool) public isOwner;
uint256 public requiredConfirmations;
struct Transaction {
address to;
uint256 value;
bool executed;
uint256 numConfirmations;
}
Transaction[] public transactions;
mapping(uint256 => mapping(address => bool)) public isConfirmed;
constructor(address[] memory _owners, uint256 _requiredConfirmations) {
require(_owners.length > 0, "Owners required");
require(_requiredConfirmations > 0 && _requiredConfirmations <= _owners.length, "Invalid number of required confirmations");
for (uint256 i = 0; i < _owners.length; i++) {
address owner = _owners[i];
require(owner != address(0), "Invalid owner");
require(!isOwner[owner], "Owner already added");
isOwner[owner] = true;
owners.push(owner);
}
requiredConfirmations = _requiredConfirmations;
}
function submitTransaction(address _to, uint256 _value) public {
require(isOwner[msg.sender], "Only owners can submit transactions");
transactions.push(Transaction({
to: _to,
value: _value,
executed: false,
numConfirmations: 0
}));
}
function confirmTransaction(uint256 _txIndex) public {
require(isOwner[msg.sender], "Only owners can confirm transactions");
require(!isConfirmed[_txIndex][msg.sender], "Transaction already confirmed");
Transaction storage tx = transactions[_txIndex];
require(!tx.executed, "Transaction already executed");
require(tx.numConfirmations < requiredConfirmations, "All confirmations have already been received");
tx.numConfirmations += 1;
isConfirmed[_txIndex][msg.sender] = true;
}
function executeTransaction(uint256 _txIndex) public {
require(isOwner[msg.sender], "Only owners can execute transactions");
require(transactions[_txIndex].numConfirmations >= requiredConfirmations, "Not enough confirmations");
Transaction storage tx = transactions[_txIndex];
require(!tx.executed, "Transaction already executed");
tx.executed = true;
(bool sent, ) = tx.to.call{value: tx.value}("");
require(sent, "Failed to send Ether");
}
}
更多 Solidity 智能合约的示例和教程,请访问本站智能合约教程。