链上链下交互 以太坊Dapp接口开发
主要是指的是用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
链上链下交互 以太坊Dapp接口开发的更多相关文章
- 如何从零开始学习区块链技术——推荐从以太坊开发DApp开始
很多人迷惑于区块链和以太坊,不知如何学习,本文简单说了一下学习的一些方法和资源. 一. 以太坊和区块链的关系 从区块链历史上来说,先诞生了比特币,当时并没有区块链这个技术和名词,然后业界从比特币中提取 ...
- 智能合约开发——以太坊 DApp 实现 购买通证token
合约的buy()方法用于提供购买股票的接口.注意关键字payable,有了它买股票的人才可以付钱给你. 接收钱没有比这个再简单的了! function buy() payable public ret ...
- 以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明
以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明 为了让你的Ðapp运行上以太坊,一种选择是使用web3.js library提供的web3.对象.底层实 ...
- 关于书籍《区块链以太坊DApp开发实战》的内容告示
书中所列举的以太坊 etherscan 浏览器,原链接已经不能使用国内网络正常访问了,需要翻墙,下面的链接不需要翻墙,也是 etherscan 的官方浏览器链接: 以太坊浏览器:https://cn. ...
- 区块链--Ubuntu上搭建以太坊私有链
1.搭建私链所需环境 操作系统:ubuntu16.04,开虚拟机的话要至少4G,否则会影响测试挖矿时的速度 软件: geth客户端 Mist和Ethereum Wallet:https://githu ...
- 区块链入门(2):搭建以太坊私有链(private network of ethereum),以及挖矿的操作..
在做一些测试工作的时候, 为了方便控制以及更快的进入真正的测试工作,可能需要搭建一个私有的以太坊网络. 而以太坊节点之间能够互相链接需要满足1)相同的协议版本2)相同的networkid,所以搭建私有 ...
- Mac下基于testrpc和truffle的以太坊智能合约开发环境搭建
原文地址:石匠的blog truffle是一个基于Javascript开发的一套智能合约开发框架,使用Solidity语言编写合约.truffle有一套自动的项目构建机制,集成了开发,测试和部署的各个 ...
- 以太坊智能合约开发工具 Truffle 入门1
Truffle是以太坊(Ethereum)智能合约开发的瑞士军刀,小巧好用,上手简单. 本篇文章主要展示如何用Truffle 开发第一个Ethereum智能合约. 1.准备工作:(本人针对window ...
- 基于以太坊的Token开发步骤
Token开发步骤 一.准备工具1.安装以太坊brew tap ethereum/ethereumbrew install ethereum2.node:brew install nodejs3.安装 ...
随机推荐
- 简单实现CombineFileInputFormat
import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.conf.Configuration; ...
- LeetCode7.整数反转 JavaScript
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: ...
- MySQL的数据类型(一)
每一个常量.变量和参数都有数据类型.它用来指定一定的存储格式.约束和有效范围.MySQL提供了多种数据类型.主要有数值型.字符串类型.日期和时间类型.不同的MySQL版本支持的数据类型可能会稍有不同. ...
- 牛客网NOIP赛前集训营-提高组18/9/9 A-中位数
链接:https://www.nowcoder.com/acm/contest/172/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 【前行】◇第3站◇ 国庆训练营·OI制模拟赛
[第3站] 国庆训练营·OI制模拟赛Ⅰ 怀着冲刺提高组400的愿望来到这个very small but very interesting 的训练营QwQ 在北大dalao的带领下开始了第一场OI模拟赛 ...
- SSM项目中用ajax尝试实现controller请求中重定向不起作用的问题
首先我在controller中有一个添加数据的方法: @RequestMapping(value="/emp",method=RequestMethod.POST) public ...
- linux系统之-vi编辑器
在linux系统使用中,掌握熟练的vi编辑器,可以提高linux工作效率.那么vi编辑器的使用方法有哪些呢? vi编辑器可在绝大部分linux发行版中使用. Vi编辑器的作用:创建或修改文件:维护li ...
- JS如何给ul下的所有li绑定点击事件,点击使其弹出下标和内容
这是一个非常常见的面试题,出题方式多样,但考察点相同,下面我们来看看这几种方法:方法一: var itemli = document.getElementsByTagName("li&quo ...
- Django模板语言(DTL)基础
## 模板变量 - 普通变量 {{ name }} - 对象变量(使用点号访问对象属性和方法,方法不加括号) {{ person.name }} ## 常用模板标签 # if标签,支持and,or,n ...
- nginx2goaccess.sh脚本内容
脚本github地址:https://github.com/stockrt/nginx2goaccess/blob/master/nginx2goaccess.sh 脚本内容: #!/bin/bash ...