工作日志 20190104

版权声明:忠于祖国,忠于人民 https://blog.csdn.net/boss2967/article/details/85796742

工作日志

技术部-2019-01-04

今日工作计划

  1. 空投代币合约的代码部署 ()
  2. 编译合约成abi和bytecode存入本地文件
  3. 调用函数去调用(合约函数)
  4. node-koa的语法整理
  5. node 业务整理

编写代码

  1. nodejs
    let solc = require(‘solc’);
    const Koa = require(‘koa’);
    let fs = require(‘fs’);
    let Web3 = require(‘web3’)
    let tc_address ;
    let DRCToken_Contrat_cat;
    //声明web3对象
    // let web3 = new Web3();
    let web3 = new Web3(new Web3.providers.HttpProvider(‘http://127.0.0.1:7545’));
    console.log(" new web3 is ok “);
    //声明 Koa对象
    const app = new Koa();
    console.log(” new Koa is ok “);
    //初始化web3
    // if (typeof web3 !‘undefined’){
    // web3 = new Web3(web3.currentProvider);
    // }else{
    // // web3 = new Web3(new Web3.providers.HttpProvider(“https://rinkeby.infura.io/” + walletConfig.infuraAPIkey));
    // web3 = new Web3(web3.setProvider(new Web3.providers.HttpProvider(‘http://localhost:7545’)));
    // }
    //读取智能合约
    let code = fs.readFileSync(’…/contracts/DRCToken_airDrop.sol’).toString();
    console.log(" read contract is => ",code);
    //编译智能合约为ABI文件
    let compiledCode = solc.compile(code,1);
    //部署至节点
    console.log(“compile cantract is =>”,compiledCode);
    // let abiDefinition = JSON.parse(compiledCode[‘contracts’][’:DRCToken_airDrop’]);
    let abiDefinition = JSON.parse(compiledCode.contracts[’:DRCToken_airDrop’].interface);
    //写入ABI文件中 保存至本地目录
    fs.writeFile(“DRCToken_airDrop.json”,JSON.stringify(abiDefinition),{},function(err){
    console.log(“write ABI file [DRCToken_airDrop.json] complete !!!”);
    });
    let DRCToken_Contract = web3.eth.contract(abiDefinition);
    //获取bytecode 部署到EVM
    let bytecode = compiledCode[‘contracts’][’:DRCToken_airDrop’].bytecode;
    //获取所有的账户
    let accounts = web3.eth.accounts;
    console.log(“地址:=>”,accounts);
    //地址获取到,开始部署
    var contractInstance = DRCToken_Contract.new([],{
    data: ‘0x’+bytecode,
    from: accounts[0],
    gas: ‘6000000’
    },function(err,myContrat){
    if(!err){
    if(!myContrat.address){
    console.log(“tranHash”,myContrat.transactions);
    }else{
    tc_address=myContrat.address;
    console.log(“address=>”,myContrat.address);
    console.log(“name=>”,myContrat.sethistoricalOwner);
    }
    }else{
    console.log(“464”,err);
    }
    });
    //输出合约对象
    console.log("Token---------------------
    >”,contractInstance);
    // //开始调用方法
    DRCToken_Contrat_cat = new web3.eth.contract(abiDefinition,tc_address,{});
    //
    DRCToken_Contrat_cat.sethistoricalOwner().call(null,function(error,result){
    console.log("contract name "+result);
    })

    // DRCToken_Contrat_cat.methods.sethistoricalOwner(‘s’,‘d’).call()
    // .then(stroageRes =>{
    // console.log(stroageRes);
    // };
    //
    // };
    // // myContract.methods.sethistoricalOwner(‘zhang’,‘ab’).call({}, function(error, result){
    // // console.log(‘调用函数’,result)
    // // });

  2. 智能合约

pragma solidity ^0.5.0;
contract TutorialToken is ERC20{
//ERC20 internal erc20tk;
address public owner;
string public name = “DRC”;
string public symbol = “DRC_Token”;
uint8 public decimals = 2;
uint public INITIAL_SUPPLY = 12000;
mapping (string =>string ) private snList;
mapping (address =>string) private historicalOwner;
mapping (address =>string) private trustOwner;
mapping (address =>string) private erctypeName;

    constructor() public {
//        _mint(msg.sender, INITIAL_SUPPLY);
        symbol ="DRC_Token1";
    }
//
//    modifier onlyOwner(){
//     require(msg.sender == address (owner));
//        _;
//    }
//
//    function setToken(address  _token) onlyOwner public{
//        require(_token!= address(0));
//        erc20tk = ERC20(_token);
//    }
//
//    function multiSendandself( address[] memory  _destAddrs,uint256[]   memory _values,uint256  _valuesmyself)onlyOwner public returns (uint256){
//        require( _destAddrs.length == _values.length);//verification
//        erc20tk.transfer(owner,_valuesmyself);
//        uint256 i = 0;
//        for(;i<_destAddrs.length;i = i.add(1)){
//            if (!erc20tk.transfer(_destAddrs[i],_values[i])){
//                break;
//            }
//        }
//        return (i);
//    }
//
//    function multiSend( address[] memory  _destAddrs,uint256[]  memory _values)onlyOwner public returns (uint256){
//        require( _destAddrs.length == _values.length);//verification
//        uint256 i = 0;
//        for(;i<_destAddrs.length;i = i.add(1)){
//            if (!erc20tk.transfer(_destAddrs[i],_values[i])){
//                break;
//            }
//        }
//        return (i);
//    }
//
//    function multiself(uint256  _values)onlyOwner public returns (bool){
//        require( _values >uint256(0));
//        erc20tk.transfer(owner,_values);
//       return true;
//    }
//
//    function settrustOwner(address   _ownaddress,string memory _owntext) public returns (bool){
//        require(_ownaddress != address(0));
////        require(trustOwner[_token](""));
////        require( _tokenName !="");
//         trustOwner[_ownaddress] = _owntext;
//        return true;
//    }
//
//    function seterctypeName(ERC20  _tokentype,string memory _tokenName) public returns (bool){
//        //         require(_token != ERC20(0));
//        //        require(trustOwner[_token](""));
//        //        require( _tokenName !="");
//        erctypeName[address(_tokentype)] = _tokenName;
//        return true;
//    }
//
//    function sethistoricalOwner(address  _hisaddress,string memory _histext) public returns (bool){
//        //         require(_token != ERC20(0));
//        historicalOwner[_hisaddress] = _histext;
//        return true;
//    }
//
//     function  deltrustOwner(address  _owneraddress)public returns(bool){
//         require(_owneraddress != address(0));
//         delete trustOwner[_owneraddress];
//         return true;
//
//     }
}

问题记录列表

  1. .Error: Cannot find module ‘web3’

koa框架整理

1. git clone https://github.com/ruanyf/koa-demos.git
2. 
cd koa-demos
npm install
3. Koa默认返回的数据类型是text/plain
4. 网页魔板
5. 路由
6. koa-route模块
7. koa-static模块封装了图片
8. 重定向
9. 中间件
10. 【注】当中间件内部没有next函数的时候,执行权就不会移交到下一个中间件中,比如我们可以删除two步骤的next方法,发现three中间件并没有执行了。
11. 异步中间件
12. 中间件合成
13. 错误处理
14. 释放err事件
15. cookie
16.	表单  curl -X POST --data "name=Jack" 127.0.0.1:3000 {"name":"Jack"}
17. 文件上传

node整理:

  1. 部署方式一:
  2. //地址获取到,开始部署 var contractInstance = DRCToken_Contract.new([],{ data: '0x'+bytecode, from: accounts[0], gas: '6000000' },function(err,myContrat){ if(!err){ if(!myContrat.address){ console.log("tranHash",myContrat.transactions); }else{ console.log("address=>",myContrat.address); } }else{ console.log("464",err); } });
    两种方式都是从通过new来部署,然后部署生产环境需要去对接一个token,本地测试中
    调用合约中的方法 参数(abi,合约地址)
    //创建合约对象
    var myContract = new web3.eth.Contract(abi,‘xxxxxxxxxxxxxxxxxxxxxxxxxx’,{});

myContract.methods.say(4,5).call({}, function(error, result){
console.log(result)
});

let manager = await lottery.methods.getManager().call();

调用合约方法:
var tokenContract = new web3.eth.Contract(MyTokenABI, ‘0x6a0dF9E94a41fCd89d8236a8C03f9D678df5Acf9’);

tokenContract.methods.name().call(null,function(error,result){
console.log("contract name "+result);
})
fundings = await fundingFactoryContract.methods.getAllFundings().call({
from: accounts[0]
})

明日工作计划:

  1. js对智能合约的开发
  2. js代码
  3. 和原来合约对接问题
  4. koa框架的下的代码编写

备注

  1. 代币是调用另一个合约的
  2. node端是分两部分,一部分是node端,另一部分是对接前端的请求数据,
  3. 多沟通,一沟通还有很多问题自己没有意识到

猜你喜欢

转载自blog.csdn.net/boss2967/article/details/85796742