智能合约是区块链技术中的一项重要应用,而 Solidity 是目前最流行的智能合约编程语言。以下是一些 Solidity 智能合约的示例,帮助您更好地理解和使用 Solidity。

示例 1: 简单的余额合约

pragma solidity ^0.8.0;

contract SimpleBalance {
    uint public balance;

    function deposit() external payable {
        balance += msg.value;
    }

    function withdraw() external {
        require(balance >= msg.value, "Balance not sufficient");
        payable(msg.sender).transfer(msg.value);
        balance -= msg.value;
    }
}

在这个示例中,我们创建了一个简单的余额合约,允许用户存入和提取余额。

示例 2: 多重签名钱包

pragma solidity ^0.8.0;

contract MultiSigWallet {
    address[] public owners;
    mapping(address => bool) public isOwner;

    uint public requiredConfirmations;

    struct Transaction {
        address to;
        uint value;
        bool executed;
        uint numConfirmations;
    }

    Transaction[] public transactions;

    mapping(uint => mapping(address => bool)) public isConfirmed;

    event Deposit(address indexed sender, uint amount);
    event Withdraw(address indexed receiver, uint amount);
    event ConfirmTransaction(address indexed owner, uint transactionId);
    event ExecuteTransaction(address indexed owner, uint transactionId);

    constructor(address[] memory _owners, uint _requiredConfirmations) {
        require(_owners.length > 0, "Owners required");
        require(_requiredConfirmations > 0 && _requiredConfirmations <= _owners.length, "Invalid number of required confirmations");

        for (uint 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 deposit() external payable {
        emit Deposit(msg.sender, msg.value);
    }

    function withdraw(uint256 amount) external {
        require(amount <= address(this).balance, "Insufficient balance");

        transactions.push(Transaction({
            to: msg.sender,
            value: amount,
            executed: false,
            numConfirmations: 0
        }));

        emit Withdraw(msg.sender, amount);
    }

    function confirmTransaction(uint transactionId) external {
        require(isOwner[msg.sender], "Not owner");

        Transaction storage transaction = transactions[transactionId];
        require(!transaction.executed, "Transaction already executed");
        require(!isConfirmed[transactionId][msg.sender], "Transaction already confirmed");

        transaction.numConfirmations += 1;
        isConfirmed[transactionId][msg.sender] = true;

        emit ConfirmTransaction(msg.sender, transactionId);

        if (transaction.numConfirmations >= requiredConfirmations) {
            transaction.executed = true;
            payable(transaction.to).transfer(transaction.value);
            emit ExecuteTransaction(msg.sender, transactionId);
        }
    }
}

在这个示例中,我们创建了一个多重签名钱包,需要多个所有者确认才能执行提款操作。

扩展阅读

想要了解更多关于 Solidity 和智能合约的知识,请访问我们的 Solidity 教程 页面。

Solidity Logo