主要是指的是用NodeJs调用 提供接口供前端使用 用户查询和转账
以太坊Dapp项目
众筹项目
功能需求
-
路人
- 查看所有众筹项目, 2 @ OK
- 根据众筹项目的address获取该众筹的详情 (参与人数/已筹金额/目标金额/结束时间/参与人数),2.5 @ OK
- 参与众筹项目, 3 @ OK
-
众筹发起人
- 创建众筹, 1 @ OK
- 查看自己创建的众筹, 5 @ OK
- 发起付款请求, 6
-
众筹参与者
- 查看已参与的众筹项目, 4 @ OK
- 审批付款请求, 7
-
获取当前account @ OK
智能合约及测试
-
外部函数的调用
参与人如何保存自己已经参与的项目
-
定义数据:
// 用于保存 参与者的所有参与的项目,每一个FundingFactory只有一个 contract PlayerToFundings { mapping(address => address[]) playersFundings; // 添加接口 (在Funding的support中被调用) function joinFunding(address funding, address sender) public{ playersFundings[sender].push(funding); } // 查询接口 (在FundingFactory中被调用) function getFundings(address sender) public view returns(address[] fundings){ // return msg.sender; return playersFundings[sender]; } }
-
把数据放到新的合约中PlayerToFundings。
mapping(address => address[]) private playerToFunings;
contract FundingFactory { PlayerToFundings playerToFundings; // 初始化PlayerToFundings合约 constructor() public { address playerToFundingsAddress = new PlayerToFundings(); playerToFundings = PlayerToFundings(playerToFundingsAddress); } // * 提供获取合约中数据的函数 function getPlayerFoundings() public view returns(address[]){ return playerToFundings.getFundings(msg.sender); } }
-
存数据:Funding support时候存数据
contract Funding { // 在factory创建Funding时,把PlayerToFundings传进来。 constructor (string _projectName, uint _supportMoney, uint _goalMoney, PlayerToFundings _p2f,address _address) public { ... p2f = _p2f; } // * 调用p2f, 把参与者参与的项目存到PlayerToFundings的mapping中 funtion support() public payable { ... players.push(msg.sender); p2f.joinFunding(address(this), msg.sender); } }
-
-
demo
pragma solidity ^0.4.17; contract PlayerToFundings { uint count = 100; function setFundingsCount(uint _count) public { count = _count; } function getFundingsCount() public view returns(uint){ return count; } } contract Factory { PlayerToFundings p2f; address[] public fundings; // function Test(address p2fAddress) public{ // p2f = PlayerToFundings(p2fAddress); // } function Factory() public{ address p2fAddress = new PlayerToFundings(); p2f = PlayerToFundings(p2fAddress); } function createFounding() public { address funding = new Funding(p2f); fundings.push(funding); } function setCount(uint count) public { p2f.setFundingsCount(count); } function getCount() public view returns(uint){ return p2f.getFundingsCount(); } } contract Funding { PlayerToFundings p2f; function Funding(PlayerToFundings _p2f) public{ p2f = _p2f; } function support() public { p2f.setFundingsCount(999); } }
智能合约及测试(web3.js)
- interaction.js智能合约代码封装
- 创建合约 createFunding