发布于 2026-01-06 0 阅读
0

如何创建智能合约来接收付款

如何创建智能合约来接收付款

随着区块链和加密货币的兴起,你肯定不想错过这个机会,对吧?

在本文中,我将教你如何使用 Solidity 创建一个智能合约来接收捐赠。

Solidity是什么?

Solidity 是一种面向对象的编程语言,用于编写智能合约。它常用于在各种区块链平台上实现智能合约,尤其是以太坊。——维基百科

实用版本

创建 .sol 文件(solidity 扩展名)后,我们要做的第一件事是定义 pragma version,这是为了让 solidity 了解我们的合约处于哪个版本,并正确编译它。

捐赠合同.sol

pragma solidity ^0.8.0;
Enter fullscreen mode Exit fullscreen mode

合同开始

现在我们要开始编写合同了,为此我们需要调用 contract + ContractName 来让 solidity 了解我们的合同代码将在哪里。

捐赠合同.sol

pragma solidity ^0.8.0;

contract DonateContract {
 //the code will stay here
}

Enter fullscreen mode Exit fullscreen mode

变量

Solidity 支持三种类型的变量:

  1. 状态变量:其值永久存储在合约存储中的变量。
  2. 局部变量:在函数执行期间具有值的变量。
  3. 全局变量:全局命名空间中存在特殊变量,用于获取有关区块链的信息。

我们将创建两种类型的状态变量:

变量的写法如下:type + variableName

  1. totalDonations:totalDonations 是一个 uint 类型,用于存储已进行的捐赠金额。
  2. 所有者:所有者是收款地址类型,将是接收捐款的合同的创建者。

注意:所有接受付款或进行付款的地址必须是可付款类型。

捐赠合同.sol

pragma solidity ^0.8.0;

contract DonateContract {

  uint totalDonations; // the amount of donations
  address payable owner; // contract creator's address

}

Enter fullscreen mode Exit fullscreen mode

使用构造函数

在我们的 Solidity 合约中,我们有一个构造函数来设置合约并设定一些标准。

我们将明确合同的所有者是谁,并且合同是可支付类型的,在本例中即为合同的创建者。

捐赠合同.sol

pragma solidity ^0.8.0;

contract DonateContract {

  uint totalDonations; // the amount of donations
  address payable owner; // contract creator's address

  //contract settings
  constructor() {
    owner = payable(msg.sender); // setting the contract creator
  }

}
Enter fullscreen mode Exit fullscreen mode

创建我们的第一个函数

现在我们将创建一个简单的函数来返回捐款金额。

捐赠合同.sol

pragma solidity ^0.8.0;

contract DonateContract {

  uint totalDonations; // the amount of donations
  address payable owner; // contract creator's address

  //contract settings
  constructor() {
    owner = payable(msg.sender); // setting the contract creator
  }

  // public function to return the amount of donations
  function getTotalDonations() view public returns(uint) {
    return totalDonations;
  }
}
Enter fullscreen mode Exit fullscreen mode

我们的函数接受三个参数:

  1. public : 此函数为公共类型,任何人都可以调用它。
  2. 视图:这意味着该函数是一个只读函数,不进行任何交易,使用它也不需要支付 gas 费用。
  3. returns(uint) : 这里我们表示该函数将返回 uint 类型的值。

创建捐款功能

现在我们要创建一个捐款功能,我们需要说明它是公开的且可支付的。

捐赠合同.sol

pragma solidity ^0.8.0;

contract DonateContract {

  uint totalDonations; // the amount of donations
  address payable owner; // contract creator's address

  //contract settings
  constructor() {
    owner = payable(msg.sender); // setting the contract creator
  }

  //public function to make donate
  function donate() public payable {
    (bool success,) = owner.call{value: msg.value}("");
    require(success, "Failed to send money");
  }

  // public function to return total of donations
  function getTotalDonations() view public returns(uint) {
    return totalDonations;
  }
}
Enter fullscreen mode Exit fullscreen mode

注意:您可以使用非重入性来提高合约的安全性。

在我们的捐赠函数中,我们用它owner.call{value: msg.value}("")来向合约所有者付款,其中msg.value(全局变量)是我们想要作为捐赠发送的值。

然后我们获取call返回结果,并使用以下方法检查转账是否成功require

require函数接受的第一个参数是一个变量,用于success指示交易是否成功,成功则返回错误,失败则返回成功。第二个参数是出错时发送的消息。

搞定啦!!我们的第一份合同已经准备好了。😁🥳

想了解更多内容,可以关注我的这里和推特:
Twitter

文章来源:https://dev.to/emanuelferreira/how-to-create-a-smart-contract-to-receive-donations-using-solidity-4k8