主页 > 下载imtoken官网苹果版 > 智能合约语言 Solidity 教程系列 6 - 结构和映射
智能合约语言 Solidity 教程系列 6 - 结构和映射
写在前面
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);