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 智能合约的示例和教程,请访问本站智能合约教程