主要是指的是用NodeJs调用 提供接口供前端使用 用户查询和转账

以太坊Dapp项目

众筹项目

功能需求

  • 路人

    • 查看所有众筹项目, 2 @ OK
    • 根据众筹项目的address获取该众筹的详情 (参与人数/已筹金额/目标金额/结束时间/参与人数),2.5 @ OK
    • 参与众筹项目, 3 @ OK
  • 众筹发起人

    • 创建众筹, 1 @ OK
    • 查看自己创建的众筹, 5 @ OK
    • 发起付款请求, 6
  • 众筹参与者

    • 查看已参与的众筹项目, 4 @ OK
    • 审批付款请求, 7
  • 获取当前account @ OK

智能合约及测试

  • 外部函数的调用

    参与人如何保存自己已经参与的项目

    1. 定义数据:

      // 用于保存 参与者的所有参与的项目,每一个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];
      } }

    2. 把数据放到新的合约中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);
      } }

    3. 存数据: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接口开发的更多相关文章

  1. 如何从零开始学习区块链技术——推荐从以太坊开发DApp开始

    很多人迷惑于区块链和以太坊,不知如何学习,本文简单说了一下学习的一些方法和资源. 一. 以太坊和区块链的关系 从区块链历史上来说,先诞生了比特币,当时并没有区块链这个技术和名词,然后业界从比特币中提取 ...

  2. 智能合约开发——以太坊 DApp 实现 购买通证token

    合约的buy()方法用于提供购买股票的接口.注意关键字payable,有了它买股票的人才可以付钱给你. 接收钱没有比这个再简单的了! function buy() payable public ret ...

  3. 以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明

    以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明 为了让你的Ðapp运行上以太坊,一种选择是使用web3.js library提供的web3.对象.底层实 ...

  4. 关于书籍《区块链以太坊DApp开发实战》的内容告示

    书中所列举的以太坊 etherscan 浏览器,原链接已经不能使用国内网络正常访问了,需要翻墙,下面的链接不需要翻墙,也是 etherscan 的官方浏览器链接: 以太坊浏览器:https://cn. ...

  5. 区块链--Ubuntu上搭建以太坊私有链

    1.搭建私链所需环境 操作系统:ubuntu16.04,开虚拟机的话要至少4G,否则会影响测试挖矿时的速度 软件: geth客户端 Mist和Ethereum Wallet:https://githu ...

  6. 区块链入门(2):搭建以太坊私有链(private network of ethereum),以及挖矿的操作..

    在做一些测试工作的时候, 为了方便控制以及更快的进入真正的测试工作,可能需要搭建一个私有的以太坊网络. 而以太坊节点之间能够互相链接需要满足1)相同的协议版本2)相同的networkid,所以搭建私有 ...

  7. Mac下基于testrpc和truffle的以太坊智能合约开发环境搭建

    原文地址:石匠的blog truffle是一个基于Javascript开发的一套智能合约开发框架,使用Solidity语言编写合约.truffle有一套自动的项目构建机制,集成了开发,测试和部署的各个 ...

  8. 以太坊智能合约开发工具 Truffle 入门1

    Truffle是以太坊(Ethereum)智能合约开发的瑞士军刀,小巧好用,上手简单. 本篇文章主要展示如何用Truffle 开发第一个Ethereum智能合约. 1.准备工作:(本人针对window ...

  9. 基于以太坊的Token开发步骤

    Token开发步骤 一.准备工具1.安装以太坊brew tap ethereum/ethereumbrew install ethereum2.node:brew install nodejs3.安装 ...

随机推荐

  1. onsubmit校验表单时利用ajax的return false无效解决方法

    代码: function checkNewEmail(){ var re_email=new RegExp("\\w+@\\w+\\.\\w+\\.?\\w*"); var new ...

  2. Oracle 行转列两种方法

    1.新建一个名为TEST表 create table TEST( STUDENT varchar2(20), COURSE varchar2(20), SCORE number); INSERT IN ...

  3. 一位90后程序员的自述:如何从年薪3w到30w

    ▌自我介绍 引用赵真老师的一首歌<过去不是错>中的一句话:过去不是过错,毕竟我们也开心过.过去不是过错,何必愧疚不知所措. 我们这一代人,我相信多少都会有人和我一样,坚持过一个游戏,叫 D ...

  4. 经验之谈—控制器的view的显示

    经验之谈—控制器的view的显示 开发中,我们经常需要将一个控制器的view添加到另一个控制器的view上,这种效果是我们期望看到的,但是里边隐藏着一些细节,不注意的话,可能会达不到我们想到的效果. ...

  5. 请对比 Exception 和 Error,另外,运行时异常与一般异常有什么区别?

    error指的是不可预料的错误,可能会导致程序宕机:而exception指的是在程序运行中可以预见的异常,而异常分为检查异常与一般异常,检查异常需要在程序中显示捕获并处理,一般异常可以通过程序编码来进 ...

  6. 企业Shell面试题及企业运维实战案例(三)

    1.企业Shell面试题1:批量生成随机字符文件名案例 使用for循环在/oldboy目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串oldboy,名称示例如下: ...

  7. 编程 - 前端 - JavaScript - 库 - ECharts (开源可视化)

    ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等) ...

  8. Java : 多态表现:静态绑定与动态绑定(向上转型的运行机制)

    本来想自己写写的,但是看到有人分析的可以说是很清晰了,故转过来. 原文地址:http://www.cnblogs.com/ygj0930/p/6554103.html 一:绑定 把一个方法与其所在的类 ...

  9. Symfony FOSUserBundle用户登录验证

    symfony是一个由组件构成的框架,登录验证的也是由一些组件构成,下面就介绍一下FOSUserBundle的使用. 以symfony 3.3为例, 首先我们需要先安装一下FOSUserBundle. ...

  10. grep用法小结

    用法 grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] -e PATTERN ... [FILE...] grep [OPTIONS] -f FILE . ...