使用truffle新建个项目
truffle使用参考 truffle文档 文件目录如下:
contracts/: Solidity合约目录
migrations/: 部署脚本文件目录
test/: 测试脚本目录,参考 如何测试合约于应用?
truffle-config.js: Truffle 配置文件
写个简单的合约,并且部署到本地。 本地的节点是利用ganache-cli。
在src文件写监听事件的代码
mysql,node已经准备好。
db.js
// 配置链接数据库参数
module.exports = {
host: 'localhost',
port: 3306, // 端口号
database: 'test', // 数据库名
user: 'root', // 数据库用户名
password: '' // 数据库密码
}
dbhelper.js
const mysql = require('mysql'); // 引入mysql模块
const databaseConfig = require('./db'); // 引入数据库配置模块中的数据
// 向外暴露方法
module.exports = {
query: function(sql, params, callback) {
// 每次使用的时候需要创建链接,数据操作完成之后要关闭连接
let connection = mysql.createConnection(databaseConfig);
connection.connect(function(err) {
if(err) {
console.log('数据库链接失败');
throw err;
}
// 开始数据操作
// 传入三个参数,第一个参数sql语句,第二个参数sql语句中需要的数据,第三个参数回调函数
connection.query(sql, params, function(err, results, fields) {
if(err) {
console.log('数据操作失败');
throw err;
}
// 将查询出来的数据返回给回调函数
callback && callback(results, fields);
// results作为数据操作后的结果,fields作为数据库连接的一些字段
// 停止链接数据库,必须再查询语句后,要不然一调用这个方法,就直接停止链接,数据操作就会失败
connection.end(function(err) {
if(err) {
console.log('关闭数据库连接失败!');
throw err;
}
});
});
});
}
};
index.js
const Web3=require('web3');
const MyContract=require('../build/contracts/Mycontract.json');
const db=require("./dbhelper")
const init =async()=>{
const web3=new Web3('http://localhost:9545');
const id =await web3.eth.net.getId();
const deployedNetwork=MyContract.networks[id];
const contract =new web3.eth.Contract(
MyContract.abi,
deployedNetwork.address
);
console.log("yuyu");
//return
const address=await web3.eth.getAccounts();
const receipt =await contract.methods
.emitEvent('hey')
.send({
from: address[0]
});
console.log(receipt.events);
console.log(receipt.events.MyEvent.returnValues.id );
//保存事件
var addSql = 'INSERT INTO blockevent(nextid,transactionIndex,transactionHash,blockHash,blockNumber,address,event,signature) VALUES(?,?,?,?,?,?,?,?)';
var addSql2 = 'INSERT INTO define_value(id,date,value,event) VALUES(?,?,?,?)';
var addSqlParams = [receipt.events.MyEvent.returnValues.eventId
,receipt.events.MyEvent.transactionIndex
,receipt.events.MyEvent.transactionHash
,receipt.events.MyEvent.blockHash
,receipt.events.MyEvent.blockNumber
,receipt.events.MyEvent.address
,receipt.events.MyEvent.event
,receipt.events.MyEvent.signature];
var addSqlParams2 = [receipt.events.MyEvent.returnValues.eventId
,receipt.events.MyEvent.returnValues.date
,receipt.events.MyEvent.returnValues.value
,receipt.events.MyEvent.event];
db.query(addSql, addSqlParams, function(err, result) {
if(err){
console.log('[INSERT ERROR] - ',err.message);
return;
}
console.log("insert success");
})
db.query(addSql2, addSqlParams2, function(err, result) {
if(err){
console.log('[INSERT ERROR2] - ',err.message);
return;
}
console.log("insert2 success");
})
//the second one
// await new Promise(resolve=>setTimeout(()=>resolve(),2000));
// contract.events.MyEvent({}).on('data',event=>console.log(event));
// the third one
// const results=await contract.getPastEvents(
// 'MyEvent',
// {
// NodeFilter :{
// value:'hey'
// },
// fromBloack: 0
// }
// );
}
init();
以上就菜鸟摸索区块链的一小步,继续加油。
|