2019-01-10工作日志

时间:2019-01-10
本文章向大家介绍2019-01-10工作日志,主要包括2019-01-10工作日志使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

工作日志 2019-01-10

1. 工作计划

  1. 封装函数
  2. 修改bug

2. 遇到问题

  1. web3连接repson测试网络
  2. 思路错误

3. 编写代码

    const Web3 = require("web3");
const solc = require('solc');
const fs = require("fs");
const Koa = require('koa');
const router = require('koa-router')();
const bodyParser = require('koa-bodyparser');
const render = require('koa-art-template');
const path = require('path');
const views = require('koa-views');
const HDWalletProvider = require('truffle-hdwallet-provider');
const walletConfig = require('./walletConfig.json');
const Tx = require('ethereumjs-tx');
//init
const app = new Koa();
var web3 = new Web3();
//
var Contract_Token;
/**Read me
* 1.简称(Token=>T,Drop=>D,TokenMgr=>M)
* 2.Actions_data=>参数初始化(各种初始化参数)
  3.Actions_Koa=>Koa框架以及Koa插件初始化和启动配置(Koa相关)
* 4.Actions_Router=>router路由的get方法,post方法配置
* 5.Actions_initWeb3Provider=>web3js相关初始化参数(web3,合约实例等)
* 6.Actions_Web3jsCommonMethod=>webjs常用的方法(获取各种参数)
* 7.Actions_Web3jsUtils=>web3js相关的工具方法(转换,校验等)
* 8.Actions_Contrant_Token=>skt测试代币的相关方法的实现(Token)
* 9.Actions_Contrant_Drop=> 空投合约的相关方法的实现(Drop)
*10.Actions_Contrant_TokenMgr=>项目之前空投合约的相关方法的实现(TokenMgr)
*11.Actions_Configure=>项目相关配置信息()
*12.Json_list=>常量信息的相关管理(abi,合约地址,gas参数,等)
*13.Json_Bz=>其它备注信息(追加,扩展)
*/
var Actions_data  = {
  Type_init:()=>{

  }
}
var Actions_Koa = {
  render: () => {
    render(app, {
      root: path.join(__dirname, '../views'), // 视图的位置
      extname: '.html', // 后缀名
      debug: process.env.NODE_ENV !== 'production' //是否开启调试模式
    })
  },
  user: () => {
    app.use(views('../views', {
      extension: 'ejs'
    }));
    app.use(bodyParser());
    app.use(router.routes());
    app.use(router.allowedMethods());
    app.use(bodyParser());
    app.listen(3003, () => {
      console.log("start at port 3003");
    });
  }

}
var Actions_Router = {
  router_get: () => {

    router.get('/', (ctx, next) => {
      // TODO:
      ctx.body = "测试路由111";
    });
    //
    router.get('/Token/T_transferFrom', (ctx, next) => {
        // TODO:
      ctx.body = "T_transferFrom";
      console.log('ctx=>11112222');
            // TODO:校验数据
            // let data =  ctx.params;
            // let from =  data.from;
            // let to   =  data.to;
            // let value=  data.value;
            let sFrom = Json_list.ADDRESS_TOKEN;
            console.log("sFrom=>",sFrom);
            let sTo = Json_list.USE_ADDRESS.User_2;
            console.log("sTo=>",sTo);
            let sValue =7;
            console.log("sValue=>",sValue);
      // if (qs.hash) {
      //   console.log('/withdraw info: ', qs.hash);
      //   qs = JSON.parse(qs.hash);
      // }
      // if (lastWid && qs.wid === lastWid) return;
      // lastWid = qs.wid;

      // T_transferFrom: (from, to, value)
      // 查询方法
      let  result = Actions_Contrant_Token.T_transferFrom({
        from: sFrom,
        to: sTo,
        value:sValue
        });
      //return
      return result;
      });

    router.get('/Token/T_transfer', (ctx, next) => {
      // TODO:
      ctx.body = "T_transfer";
    });

    router.get('/Token/T_approve', (ctx, next) => {
      // TODO:
      ctx.body = "T_approve";
    });

    router.get('/Token/T_allowance', (ctx, next) => {
      // TODO:
      ctx.body = "T_allowance";
    });

    router.get('/Drop/D_setToken', (ctx, next) => {
      // TODO:
      ctx.body = "D_setToken";
    });

    router.get('/Drop/D_multiSendandself', (ctx, next) => {
      // TODO:
      ctx.body = "D_multiSendandself";
    });

    router.get('/Drop/D_multiSend', (ctx, next) => {
      // TODO:
      ctx.body = "D_multiSend";
    });

    router.get('/Drop/D_multiSend2', (ctx, next) => {
      // TODO:
      ctx.body = "D_multiSend2";
    });

    router.get('/Drop/D_multiself', (ctx, next) => {
      // TODO:
      ctx.body = "D_multiself";
    });

    router.get('/Drop/D_settrustOwner', (ctx, next) => {
      // TODO:
      ctx.body = "D_settrustOwner";
    });

    router.get('/Drop/D_seterctypeName', (ctx, next) => {
      // TODO:
      ctx.body = "D_seterctypeName";
    });

    router.get('/Drop/D_sethistoricalOwner', (ctx, next) => {
      // TODO:
      ctx.body = "D_sethistoricalOwner";
    });

    router.get('/Drop/D_transfer', (ctx, next) => {
      // TODO:
      ctx.body = "D_transfer";
    });

    router.get('/Drop/D_approve', (ctx, next) => {
      // TODO:
      ctx.body = "D_approve";
    });

    router.get('/Drop/D_transferFrom', (ctx, next) => {
      // TODO:
      ctx.body = "D_transferFrom";
    });

    router.get('/Drop/D_balanceOf', (ctx, next) => {
      // TODO:
      ctx.body = "D_balanceOf";
    });

    //
    router.get('/Drop/M_prepare', (ctx, next) => {
      // TODO:
      ctx.body = "M_prepare";
    });

    router.get('/Drop/M_flyDrop', (ctx, next) => {
      // TODO:
      ctx.body = "M_flyDrop";
    });

  },
  router_post: () => {

    router.post('/', (ctx, next) => {
      // TODO:
      ctx.body = "测试路由111";
    });
    //
    router.post('/Token/T_transferFrom', (ctx, next) => {
      // TODO:
      ctx.body = "T_transferFrom";
    });

    router.post('/Token/T_transfer', (ctx, next) => {
      // TODO:
      ctx.body = "T_transfer";
    });

    router.post('/Token/T_approve', (ctx, next) => {
      // TODO:
      ctx.body = "T_approve";
    });

    router.post('/Token/T_allowance', (ctx, next) => {
      // TODO:
      ctx.body = "T_allowance";
    });

    router.post('/Drop/D_setToken', (ctx, next) => {
      // TODO:
      ctx.body = "D_setToken";
    });

    router.post('/Drop/D_multiSendandself', (ctx, next) => {
      // TODO:
      ctx.body = "D_multiSendandself";
    });

    router.post('/Drop/D_multiSend', (ctx, next) => {
      // TODO:
      ctx.body = "D_multiSend";
    });

    router.post('/Drop/D_multiSend2', (ctx, next) => {
      // TODO:
      ctx.body = "D_multiSend2";
    });

    router.post('/Drop/D_multiself', (ctx, next) => {
      // TODO:
      ctx.body = "D_multiself";
    });

    router.post('/Drop/D_settrustOwner', (ctx, next) => {
      // TODO:
      ctx.body = "D_settrustOwner";
    });

    router.post('/Drop/D_seterctypeName', (ctx, next) => {
      // TODO:
      ctx.body = "D_seterctypeName";
    });

    router.post('/Drop/D_sethistoricalOwner', (ctx, next) => {
      // TODO:
      ctx.body = "D_sethistoricalOwner";
    });

    router.post('/Drop/D_transfer', (ctx, next) => {
      // TODO:
      ctx.body = "D_transfer";
    });

    router.post('/Drop/D_approve', (ctx, next) => {
      // TODO:
      ctx.body = "D_approve";
    });

    router.post('/Drop/D_transferFrom', (ctx, next) => {
      // TODO:
      ctx.body = "D_transferFrom";
    });

    router.post('/Drop/D_balanceOf', (ctx, next) => {
      // TODO:
      ctx.body = "D_balanceOf";
    });

    //
    router.post('/Drop/M_prepare', (ctx, next) => {
      // TODO:
      ctx.body = "M_prepare";
    });

    router.post('/Drop/M_flyDrop', (ctx, next) => {
      // TODO:
      ctx.body = "M_flyDrop";
    });

  }
}
var Actions_initWeb3Provider = {
  initWeb3: () => {
    //创建一个web3实例,设置一个provider,成功引入后,就可以用web3的api
    if (typeof web3 == 'undefined') {
      web3 = new Web3(web3.currentProvider); //新建web3对象
      console.log("web  undefined");
    } else {
      // TODO:
      web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/v3/ee23e77aa14846d88eb5cad3d59e37f2"));
    } //设置一个provider
    // TODO:
    console.log("web3实例化完成=>");
    console.log("web3.currentProvider=>",web3.currentProvider);
    console.log("web3是否连接成功=>",web3.isConnected());
    console.log("默认账户",web3.eth.defaultAccount);
    console.log("默认区块",web3.eth.defaultBlock);
    // web3.eth.defaultAccount = "";
    web3.eth.defaultAccount='0x38a8DC14edE1DEf9C437bB3647445eEec06fF105';
      console.log("默认账户",web3.eth.defaultAccount);

  },
  initContract_Token: () => {
    // TODO:
    let Abi_Token = Json_list.ABI_TOKEN;
    let Address_Token = Json_list.ADDRESS_TOKEN;
    //Token  实例化
     Contract_Token = web3.eth.contract(Abi_Token).at(Address_Token);
    // TODO:
    console.log("Token合约实例完成=>");
  },
  initContract_drop: () => {
    // TODO:
    let Abi_drop = "";
    let Address_drop = "";
    //drop  实例化
    var Contract_drop = web_TokenMgr.eth.constant(Abi_drop).at(Address_drop);
  },
  initContract_TokenMgr: () => {
    // TODO:
    let Abi_TokenMgr = "";
    let Address_TokenMgr = "";
    //TokenMgr  实例化
    var Contract_drop = web3.eth.constant(Abi_TokenMgr).at(Address_TokenMgr);
  }
}
var Actions_Web3jsCommonMethod = {
  web_api: () => {
    // TODO:
  },
  web_node: () => {
    // TODO:

  },
  web3_isConnected: () => {
    // TODO:
  },
  web3_currentProvider: () => {
    // TODO:
  }
}
var Actions_Web3jsUtils = {
  web_api: () => {
    // TODO:
  },
  web_node: () => {
    // TODO:

  },
  web3_isConnected: () => {
    // TODO:
  },

  //工具函数@预估gas
  web3_estimateGas: (address,data) => {
    // TODO:
  let  estimateGas = web3.eth.estimateGas({
        to: address,
        data: data
    });
  estimateGas = this.web3.toHex(estimateGas);
    return estimateGas;
  },
  // 工具函数@预估区块高度
  web3_getNonce: (address) => {
    // TODO:
    let nonce  = web3.eth.getTransactionCount(address);
    return nonce;
  },
  //工具函数@序列化私钥
  web3_bufferPrivateKey: (value) => {
    // TODO:
    const privateKey = new Buffer(value,'hex');
    return privateKey;
  },
  web3_currentProvider: () => {
    // TODO:
  }
}
var Actions_Contrant_Token = {
  T_transferFrom: (ctx,next) => {
    // TODO:
      let Tx_gasPrice =web3.toHex('0x3B9ACA00'*1000);// TODO:
      // let Tx_value = "0x00";// TODO:
      let Tx_address = ctx.from;// TODO: