主页 > 下载imtoken官网苹果版 > 智能合约语言 Solidity 教程系列 6 - 结构和映射

智能合约语言 Solidity 教程系列 6 - 结构和映射

下载imtoken官网苹果版 2023-09-09 05:07:38

写在前面

Solidity 是以太坊智能合约编程语言。 在阅读本文之前,您应该对以太坊和智能合约有一定的了解。

如果你还不知道,我建议你看看以太坊是什么

本系列文章部分内容参考Solidity官方文档(当前最新版本:0.4.20)翻译而成,另一部分为Solidity深度解析。 请订阅区块链技术专栏阅读本部分内容。

结构(结构)

Solidity 提供了 struct 来定义自定义类型,自定义类型是引用类型。

让我们看看下面的例子:

```js

pragma solidity ^0.4.11;

合同众筹{

// 定义一个有两个成员的新类型

结构资助者{

地址地址;

单位数量;

}

  • struct Campaign {
  • address beneficiary;
  • uint fundingGoal;
  • uint numFunders;
  • uint amount;
  • mapping (uint => Funder) funders;
  • }
  • uint numCampaigns;
  • mapping (uint => Campaign) campaigns;
  • function newCampaign(address beneficiary, uint goal) public returns (uint campaignID) {
  • campaignID = numCampaigns++; // campaignID 作为一个变量返回
  • // 创建一个结构体实例,存储在storage ,放入mapping里
  • campaigns[campaignID] = Campaign(beneficiary, goal, 0, 0);
  • }
  • function contribute(uint campaignID) public payable {
  • Campaign storage c = campaigns[campaignID];
  • // 用mapping对应项创建一个结构体引用
  • // 也可以用 Funder(msg.sender, msg.value) 来初始化.
  • c.funders[c.numFunders++] = Funder({addr: msg.sender, amount: msg.value});
  • c.amount += msg.value;
  • }
  • function checkGoalReached(uint campaignID) public returns (bool reached) {
  • Campaign storage c = campaigns[campaignID];
  • if (c.amount < c.fundingGoal)
  • return false;
  • uint amount = c.amount;
  • c.amount = 0;
  • c.beneficiary.transfer(amount);

写在前面

Solidity 是以太坊智能合约编程语言。 在阅读本文之前以太坊智能合约转不出去币,您应该对以太坊和智能合约有一定的了解。

如果你还不知道以太坊智能合约转不出去币,我建议你看看以太坊是什么

本系列文章部分内容参考Solidity官方文档(当前最新版本:0.4.20)翻译而成,另一部分为Solidity深度解析。 请订阅区块链技术专栏阅读本部分内容。

结构(结构)

Solidity 提供了 struct 来定义自定义类型,自定义类型是引用类型。

让我们看看下面的例子:

```js

pragma solidity ^0.4.11;

合同众筹{

// 定义一个有两个成员的新类型

结构资助者{

地址地址;

单位数量;

}

  • struct Campaign {
  • address beneficiary;
  • uint fundingGoal;
  • uint numFunders;
  • uint amount;
  • mapping (uint => Funder) funders;
  • }
  • uint numCampaigns;
  • mapping (uint => Campaign) campaigns;
  • function newCampaign(address beneficiary, uint goal) public returns (uint campaignID) {
  • campaignID = numCampaigns++; // campaignID 作为一个变量返回
  • // 创建一个结构体实例,存储在storage ,放入mapping里
  • campaigns[campaignID] = Campaign(beneficiary, goal, 0, 0);
  • }
  • function contribute(uint campaignID) public payable {
  • Campaign storage c = campaigns[campaignID];
  • // 用mapping对应项创建一个结构体引用
  • // 也可以用 Funder(msg.sender, msg.value) 来初始化.
  • c.funders[c.numFunders++] = Funder({addr: msg.sender, amount: msg.value});
  • c.amount += msg.value;
  • }
  • function checkGoalReached(uint campaignID) public returns (bool reached) {
  • Campaign storage c = campaigns[campaignID];
  • if (c.amount < c.fundingGoal)
  • return false;
  • uint amount = c.amount;
  • c.amount = 0;
  • c.beneficiary.transfer(amount);

写在前面

Solidity 是以太坊智能合约编程语言。 在阅读本文之前,您应该对以太坊和智能合约有一定的了解。

如果你还不知道,我建议你看看以太坊是什么

本系列文章部分内容参考Solidity官方文档(当前最新版本:0.4.20)翻译而成,另一部分为Solidity深度解析。 请订阅区块链技术专栏阅读本部分内容。

结构(结构)

Solidity 提供了 struct 来定义自定义类型,自定义类型是引用类型。

让我们看看下面的例子:

```js

pragma solidity ^0.4.11;

合同众筹{

// 定义一个有两个成员的新类型

结构资助者{

地址地址;

单位数量;

}

  • struct Campaign {
  • address beneficiary;
  • uint fundingGoal;
  • uint numFunders;
  • uint amount;
  • mapping (uint => Funder) funders;
  • }
  • uint numCampaigns;
  • mapping (uint => Campaign) campaigns;
  • function newCampaign(address beneficiary, uint goal) public returns (uint campaignID) {
  • campaignID = numCampaigns++; // campaignID 作为一个变量返回
  • // 创建一个结构体实例,存储在storage ,放入mapping里
  • campaigns[campaignID] = Campaign(beneficiary, goal, 0, 0);
  • }
  • function contribute(uint campaignID) public payable {
  • Campaign storage c = campaigns[campaignID];
  • // 用mapping对应项创建一个结构体引用
  • // 也可以用 Funder(msg.sender, msg.value) 来初始化.
  • c.funders[c.numFunders++] = Funder({addr: msg.sender, amount: msg.value});
  • c.amount += msg.value;
  • }
  • function checkGoalReached(uint campaignID) public returns (bool reached) {
  • Campaign storage c = campaigns[campaignID];
  • if (c.amount < c.fundingGoal)
  • return false;
  • uint amount = c.amount;
  • c.amount = 0;
  • c.beneficiary.transfer(amount);