工作日志
技术部-2019-01-04
今日工作计划
- 空投代币合约的代码部署 ()
- 编译合约成abi和bytecode存入本地文件
- 调用函数去调用(合约函数)
- node-koa的语法整理
- node 业务整理
编写代码
-
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)
// // }); -
智能合约
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;
//
// }
}
问题记录列表
- .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整理:
- 部署方式一:
//地址获取到,开始部署 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]
})
明日工作计划:
- js对智能合约的开发
- js代码
- 和原来合约对接问题
- koa框架的下的代码编写
备注
- 代币是调用另一个合约的
- node端是分两部分,一部分是node端,另一部分是对接前端的请求数据,
- 多沟通,一沟通还有很多问题自己没有意识到