Solidity 是以太坊智能合约的编程语言。在这个指南中,我们将通过一些示例来展示如何使用 Solidity 编写智能合约。
示例列表
以下是一些 Solidity 示例:
简单的存储合约
这是一个简单的存储合约示例,它允许你存储一个值。
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;
}
}
发送以太坊
以下是一个示例,展示如何从合约发送以太坊到另一个地址。
pragma solidity ^0.8.0;
contract SendEther {
function send(address payable _to, uint256 _amount) public {
_to.transfer(_amount);
}
}
多重签名钱包
多重签名钱包需要一个以上的私钥来执行交易。
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");
owners.push(owner);
isOwner[owner] = true;
}
requiredConfirmations = _requiredConfirmations;
}
function submitTransaction(address _to, uint256 _value) public {
uint256 transactionCount = transactions.length;
transactions.push(Transaction({
to: _to,
value: _value,
executed: false,
numConfirmations: 0
}));
}
function confirmTransaction(uint256 _txIndex) public {
require(isOwner[msg.sender], "Not owner");
Transaction storage transaction = transactions[_txIndex];
require(!isConfirmed[_txIndex][msg.sender], "Transaction already confirmed");
transaction.numConfirmations += 1;
isConfirmed[_txIndex][msg.sender] = true;
if (transaction.numConfirmations >= requiredConfirmations) {
transaction.to.transfer(transaction.value);
transaction.executed = true;
}
}
function getOwners() public view returns (address[] memory) {
return owners;
}
function getTransactionsCount() public view returns (uint256) {
return transactions.length;
}
function getTransaction(uint256 _txIndex) public view returns (address, uint256, bool, uint256) {
Transaction storage transaction = transactions[_txIndex];
return (transaction.to, transaction.value, transaction.executed, transaction.numConfirmations);
}
}
更多关于 Solidity 的信息,请访问我们的Solidity 教程。