使用console.log(web3.version.api);来查看了web3的版本是0.20.1,

参考文档在:
https://github.com/ethereum/wiki/wiki/JavaScript-API
在学习的过程中你会看见很多实例是不一样的,就单单是合约的部署的地方的运行语句就十分地不同,这就是web3 0.2版本跟1.0版本的不同
之后打算使用1.0版本的了

1.首先,需要去声明一个web3实例,,然后去设置provider

if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
//当你之前如果使用过mist钱包等时,你的provider可能已经设置好了,web3.currentProvider就是你目前的provider
} else {
// set the provider you want from Web3.providers
web3 = new Web3(new Web3.providers.HttpProvider(“http://localhost:8545”));
}
//Note: HttpProvider takes 4 arguments (host, timeout, user, password)

或者:
if(!web3.currentProvider)//返回provider set or null
    web3.setProvider(new web3.providers.HttpProvider("http://localhost:8545"));

2.在节点中的函数都是默认可以使用回调函数的,举例:
web3.eth.getBlock(48, function(error, result){
    if(!error)
        console.log(JSON.stringify(result));
    else
        console.error(error);
})

3.Batch requests(批处理请求):当你想要请求按一定的顺序一次性调用时
var batch = web3.createBatch();
batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback));
batch.add(web3.eth.contract(abi).at(address).balance.request(address, callback2));
batch.execute();

4.web3中的的数字是基于BigNumber Library 的
调用方法:
var BigNumber = require('bignumber.js');
var balance = new BigNumber(‘131242344353464564564574574567456’);

//这样输出为:
BigNumber { s: 1, e: 32, c: [ 13124, 23443534645645, 64574574567456 ] }

console.log(balance.toString(10));//10进制
//这样输出为:131242344353464564564574574567456

balance.plus(21).toString(10); // toString(10) converts it to a number string
// “131242344353464564564574574567477"

a = new BigNumber(1011, 2)          // “11" 二进制
b = new BigNumber('zz.9', 36)       // “1295.25" 36进制

之后从web3的API参考手册开始看起:
1.web3.version.api
使用console.log(web3.version.api);
//来查看了web3的版本是0.20.1

2.web3.version.node
(1)console.log(web3.version.node);
(2)
web3.version.getNode(function(error,result){
    if(!error){
        console.log(result);
    }else{
        console.log(error);
    }
});
//结果都是:Geth/v1.8.3-stable/darwin-amd64/go1.10.1

3.web3.version.network
(1)console.log(web3.version.network);
(2)web3.version.getNetwork(function(error,result){
    if(!error){
        console.log(result);
    }else{
        console.log(error);
    }
});
//得到的结果是geth是设置的networkID 314590 (--networkid 314590)

4.web3.version.ethereum查看以太坊协议的版本
(1)console.log(web3.version.ethereum);
(2)web3.version.getEthereum(function(error,result){
    if(!error){
        console.log(result);
    }else{
        console.log(error);
    }
});
//结果是0x3f(63)

5.web3.version.whisper
whisper实际上就是以太坊p2p网络上的一个应用,所以如果你以后要设计一个聊天室的话,就要使用这个协议了,要感受whisper可以通过启动wnode来感受
可以构建一个完整的p2p聊天室,并且消息加密,无法被追踪;并且不需要服务器,永不停机。基于以太坊的whisper,它本来是为以太坊上的DAPPS通信构建的,有点复杂,以后再学
http://www.cnblogs.com/baizx/p/7505096.html
https://www.cnblogs.com/baizx/p/7898692.html

(1)console.log(web3.version.whisper);
(2)web3.version.getWhisper(function(error,result){
    if(!error){
        console.log(result);
    }else{
        console.log(error);
    }
});

//结果是:Error: The method shh_version does not exist/is not available

6.console.log(web3.isConnected());//true
是否链接了节点

7.web3.setProvider(provider)
var web3 = new Web3();
web3.setProvider(new Web3.providers.HttpProvider(“http://localhost:8201"));//使用local3私有链

8.web3.sha3(string [, options])
var hash = web3.sha3("Some string to be hashed");
console.log(hash); // "0xed973b234cf2238052c9ac87072c71bcf33abc1bbd721018e0cca448ef79b379"
//使用使用keccak-256哈希算法计算字符串的hash值

var hashOfHash = web3.sha3(hash, {encoding: 'hex'});
console.log(hashOfHash); // “0x85dd39c91a64167ba20732b228251e67caed1462d4bcf036af88dc6856d0fdcc"
//当string处的值hash是十六进制时(if the string to hash is encoded in hex),就设置{encoding: ‘hex'}

9.web3.toHex(mixed);
var str = web3.toHex({test: 'test'});
console.log(str); // ‘0x7b2274657374223a2274657374227d'

10.web3.toAscii(hexString);
Converts a HEX string into a ASCII string.

var str = web3.toAscii("0x657468657265756d000000000000000000000000000000000000000000000000");
console.log(str); // “ethereum"

11.web3.fromAscii(string [, padding]);
Converts any ASCII string to a HEX string.
var str = web3.fromAscii('ethereum');
console.log(str); // "0x657468657265756d"

var str2 = web3.fromAscii('ethereum', 32);//32bytes
console.log(str2); // “0x657468657265756d000000000000000000000000000000000000000000000000"
//16进制的1位就是1bytes

12.web3.toDecimal(hexString)//把16进制的字符串转为10进制
13.web3.fromDecimal(number|String);//反过来

14.web3.fromWei(number|String|BigNumber, unit(String))
var value = web3.fromWei('21000000000000', 'finney');
console.log(value); // “0.021"
21000000000000wei->0.021finney

15.web3.toWei(number, unit)
var value = web3.toWei('1', 'ether');
console.log(value); // “1000000000000000000"
//1ether->1000000000000000000wei

16.web3.toBigNumber(numberOrHexString);
17.web3.isAddress(HexString);

18.web3.eth.defaultBlock//默认是最晚生成的那一个latest,或
web3.eth.defaultBlock(blockNumber)
web3.eth.defaultBlock(“earliest")//the genesis block
web3.eth.defaultBlock(“pending”)the currently mined block (including pending transactions)

19.
(1)web3.eth.syncing查询同步的信息
(2)web3.eth.getSyncing(callback(error, result){ ... })
是否正在同步区块,是就返回同步的对象信息:
{
startingBlock:Number - 同步开始区块号
currentBlock: Number - 节点当前正在同步的区块号
highestBlock: Number - 预估要同步到的区块
}
否则返回false

20.web3.eth.isSyncing 检查是否与网络同步
同步有三种状态,true(刚开始)、正在进行时和已经结束false
web3.eth.isSyncing(function(error, sync){
    if(!error) {
        // stop all app activity
        if(sync === true) {
           // we use `true`, so it stops all filters, but not the web3.eth.syncing polling
           web3.reset(true);
        
        // show sync info
        } else if(sync) {
           console.log(sync.currentBlock);
        
        // re-gain app operation
        } else {
            // run your app init function...
        }
    }
});

21.web3.reset
用来重置web3的状态。重置除了manager以外的其它所有东西。卸载filter,停止状态轮询。
参数:
Boolean - 如果设置为true,将会卸载所有的filter,但会保留web3.eth.isSyncing()的状态轮询。

22.web3.eth.hashrate查询每秒节点挖矿的哈希难度

23.web3.eth.gasPrice
返回当前的gas价格。这个值由最近几个块的gas价格的中值决定。
返回的是BigNumber,用toString(10)转成10进制

24.web3.eth.blockNumber目前区块数量

25.web3.eth.getStorageAt????

26.web3.eth.getBlockTransactionCount(hashStringOrBlockNumber |Number [, callback])得到某区块中的交易数量
输入区块的number、hash值或string("earliest", "latest" or “pending”)

27.web3.eth.getTransactionReceipt(transactionHash)
pending的transaction是调用不出来值的,可以查看出更多的信息,可以看出交易是否成功
"status": “0x1"为成功;"status": “0x0"为不成功
若某个transactionHash是生成某个智能合约的,那么用这个函数就可以在contractAddress值处查看到合约的地址

28.web3.eth.sendTransaction(transactionObject [, callback])
transactionObject就是各种值{from:..,to:..,}
    •    from: String - 指定的发送者的地址。如果不指定,使用web3.eth.defaultAccount。
    •    to: String - (可选)交易消息的目标地址,如果是合约创建,则不填.
    •    value: Number|String|BigNumber - (可选)交易携带的货币量,以wei为单位。如果合约创建交易,则为初始的基金。
    •    gas: Number|String|BigNumber - (可选)默认是自动,交易可使用的gas,未使用的gas会退回。
    •    gasPrice: Number|String|BigNumber - (可选)默认是自动确定,交易的gas价格,默认是网络gas价格的平均值 。
    •    data: String - (可选)或者包含相关数据的字节字符串,如果是合约创建,则是初始化要用到的代码。
    •    nonce: Number - (可选)整数,使用此值,可以允许你覆盖你自己的相同nonce的,正在pending中的交易11。

29.web3.eth.sendRawTransaction(signedTransactionData [, callback])发送一个已经签名的交易
signedTransactionData:16进制的签名的交易数据
这就是一个签名的步骤:
var Tx = require('ethereumjs-tx');
var privateKey = new Buffer('e331b6d69882b4cb4ea581d88e0b604039a3de5967688d3dcffdd2270c0fd109', 'hex')

var rawTx = {
  nonce: '0x00',
  gasPrice: '0x09184e72a000',
  gasLimit: '0x2710',
  to: '0x0000000000000000000000000000000000000000',
  value: '0x00',
  data: '0x7f7465737432000000000000000000000000000000000000000000000000000000600057'
}

var tx = new Tx(rawTx);
tx.sign(privateKey);

var serializedTx = tx.serialize();//序列化???

//console.log(serializedTx.toString('hex'));
//f889808609184e72a00082271094000000000000000000000000000000000000000080a47f74657374320000000000000000000000000000000000000000000000000000006000571ca08a8bbf888cfa37bbf0bb965423625641fc956967b81d12e23709cead01446075a01ce999b56a8a88504be365442ea61239198e23d1fce7d00fcfc5cd3b44b7215f

web3.eth.sendRawTransaction('0x' + serializedTx.toString('hex'), function(err, hash) {
  if (!err)
    console.log(hash); // "0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385"
});

30.web3.eth.sign(address, dataToSign, [, callback])
使用指定账户address对要发送的数据dataToSign进行签名,所以该账户是要解锁的,dataToSign可以使用进行哈希web3.sha3(“xyz")后的值

然后会返回使用ECDSA(椭圆曲线数字签名算法)签名后得到的字符串,表示为:
r = signature[0:64]
s = signature[64:128]
v = signature[128:130]
就是在eth.getTransaction看到的那几个值

31.web3.eth.filter
输入的值即为输入的过滤条件,对所有的日志信息进行过滤来获得自己想要知道的信息
(1)// filterString can be 'latest' or 'pending'
var filter = web3.eth.filter(filterString);

(2)var filter = web3.eth.filter(options);
    •    fromBlock: Number|string - 起始区块号(如果使用字符串latest,意思是最新的,正在打包的区块),默认值是latest。
    •    toBlock: Number|string - 终止区块号(如果使用字符串latest,意思是最新的,正在打包的区块),默认值是latest。
    •    address: String - 单个或多个地址。获取指定帐户的日志。
    •    topics: String[] - 在日志对象中必须出现的字符串数组。顺序非常重要,如果你想忽略主题,使用null。如,[null,'0x00...'],你还可以为每个主题传递一个单独的可选项数组,如[null,['option1','option1']]。

然后上面的过滤怎么获得信息:
(1)filter.get(callback): 返回满足过滤条件的日志。
(2)filter.watch(callback): 监听满足条件的状态变化,满足条件时调用回调7。
watch监听回调返回值:
    《1》String - 当使用latest参数时。返回最新的一个区块哈希值。
  《2》String - 当使用pending参数时。返回最新的pending中的交易哈希值。
  《3》Object - 当使用手工过滤选项options时,将返回下述的日志对象。
    ◦    logIndex: Number - 日志在区块中的序号。如果是pending的日志,则为null。
    ◦    transactionIndex: Number - 产生日志的交易在区块中的序号。如果是pending的日志,则为null。
    ◦    transactionHash: String,32字节 - 产生日志的交易哈希值。
    ◦    blockHash: String,32字节 - 日志所在块的哈希。如果是pending的日志,则为null。
    ◦    blockNumber: Number - 日志所在块的块号。如果是pending的日志,则为null。
    ◦    address: String,32字节 - 日志产生的合约地址。
    ◦    data: string - 包含日志一个或多个32字节的非索引的参数。
    ◦    topics: String[] - 一到四个32字节的索引的日志参数数组。(在Solidity中,第一个主题是整个事件的签名(如,Deposit(address,bytes32,uint256)),但如果使用匿名的方式定义事件的情况除外)

filter.stopWatching(): 停止监听,清除节点中的过滤。你应该总是在监听完成后,执行这个操作。

与其有相同的功能的就是合约中的事件event了
当一个合同中有设置event时,如果想要查看event。举例:
得到的是符合条件a == 5的事件myEvent的值
// create filter
var event = myContractInstance.myEvent({a: 5}, function (error, result) {
  if (!error)
    console.log(result);
    /*
    {
        address: '0x8718986382264244252fc4abd0339eb8d5708727',
        topics: "0x12345678901234567890123456789012", "0x0000000000000000000000000000000000000000000000000000000000000005",
        data: "0x0000000000000000000000000000000000000000000000000000000000000001",
        ...
    }
    */
});
或者不回调,使用监听watch或get:
var event = myContractInstance.myEvent({a: 5});
event.watch(function(error, result){
  if (!error)
    console.log(result);
});
event.stopWatching();

条件还可以写成:
var myEvent = myContractInstance.MyEvent({some: 'args'}, {fromBlock: 0, toBlock: 'latest'});

还有监听所有事件的:
var events = myContractInstance.allEvents(条件,回调);

32.如何用语句去配置合约,以前都是说将sol代码导入到remix-ide中去,然后再在它上面进行编译compile-部署deploy,但是现在要学会怎么使用代码去将这些步骤完成了

// Deploy the contract asynchronous(异步) from Solidity file:

const fs = require("fs");
const solc = require('solc') let source = fs.readFileSync('nameContract.sol', ‘utf8’); // Setting 1 as second paramater activates the optimiser(最优)
let compiledContract = solc.compile(source, 1);//编译 let abi = compiledContract.contracts[‘nameContract’].interface; //bytecode就是之前在remix-compile-details-web3deploy中的那串很长的数字
let bytecode = compiledContract.contracts[‘nameContract'].bytecode; //原来这个是这么算的
let gasEstimate = web3.eth.estimateGas({data: bytecode});
let MyContract = web3.eth.contract(JSON.parse(abi)); //若构造函数没有变量,那么这里的param1, param2是可以去掉的
var myContractReturned = MyContract.new(param1, param2, {
from:mySenderAddress,//一般就是eth.accounts[0]
data:bytecode,
gas:gasEstimate}, function(err, myContract){//这个回调回执行两次
if(!err) {
// NOTE: The callback will fire twice!
// Once the contract has the transactionHash property set and once its deployed on an address.
//一次是合约的交易哈希属性完成
//另一次是在某个地址上完成部署 // e.g. check tx hash on the first call (transaction send)
if(!myContract.address) {//第一次
console.log(myContract.transactionHash) // The hash of the transaction, which deploys the contract // check address on the second call (contract deployed)
} else {//第二次
console.log(myContract.address) // the contract address
} // Note that the returned "myContractReturned" === "myContract",
// so the returned "myContractReturned" object will also get the address set.
}
});

//这个是一个比较特别的input,可以一下子编译两个sol文件,而且还进行调用

var solc = require('solc')
var input = {
'lib.sol': 'library L { function f() returns (uint) { return 7; } }',
'cont.sol': 'import "lib.sol"; contract x { function g() { L.f(); } }'
}
var output = solc.compile({ sources: input }, 1)
for (var contractName in output.contracts)
console.log(contractName + ': ' + output.contracts[contractName].bytecode)

33.返回可用的编译器
var number = web3.eth.getCompilers();
console.log(number); // ["lll", "solidity", “serpent"]三种编译器

34.web3.eth.compile.solidity(sol代码)
编译sol文件

web3数据库部分
35.web3.db.putString(db, key, value)想存储string到本地数据库上的时候使用
Parameters
    1    String - The database to store to.
    2    String - The name of the store.就是相当于索引值的感觉,通过key来找到value
    3    String - The string value to store.
Returns
Boolean - true if successfull, otherwise false.

36.web3.db.getString(db, key)取出

37.web3.db.putHex(db, key, value)想存储16进制时
38.web3.db.getHex(db, key)取出

shh部分——whisper
(这部分我还是不是很明白,之后用得到再看吧)

iban部分,也不知道这个是什么

web3js learning的更多相关文章

  1. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  2. 【Machine Learning】Python开发工具:Anaconda+Sublime

    Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...

  3. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  4. 【Machine Learning】决策树案例:基于python的商品购买能力预测系统

    决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...

  5. Deep learning:五十一(CNN的反向求导及练习)

    前言: CNN作为DL中最成功的模型之一,有必要对其更进一步研究它.虽然在前面的博文Stacked CNN简单介绍中有大概介绍过CNN的使用,不过那是有个前提的:CNN中的参数必须已提前学习好.而本文 ...

  6. Programming Learning - Based on Project

    Today when taking a bath I got a good idea that it is an efficient and interesting way to learn a ne ...

  7. 做中学(Learning by Doing)之背单词-扇贝网推荐

    做中学(Learning by Doing)之背单词-扇贝网推荐 看完杨贵福老师(博客,知乎专栏,豆瓣)的「继续背单词,8个月过去了」,我就有写这篇文章的冲动了,杨老师说: 有时候我会感觉非常后悔,如 ...

  8. 【原】Learning Spark (Python版) 学习笔记(一)----RDD 基本概念与命令

    <Learning Spark>这本书算是Spark入门的必读书了,中文版是<Spark快速大数据分析>,不过豆瓣书评很有意思的是,英文原版评分7.4,评论都说入门而已深入不足 ...

  9. 【原】Learning Spark (Python版) 学习笔记(四)----Spark Sreaming与MLlib机器学习

    本来这篇是准备5.15更的,但是上周一直在忙签证和工作的事,没时间就推迟了,现在终于有时间来写写Learning Spark最后一部分内容了. 第10-11 章主要讲的是Spark Streaming ...

随机推荐

  1. 谈谈你对 Java 平台的理解

    声明 本篇所涉及的提问,正文的知识点,全都来自于杨晓峰的<Java核心技术36讲>,当然,我并不会全文照搬过来,毕竟这是付费的课程,应该会涉及到侵权之类的问题. 所以,本篇正文中的知识点, ...

  2. 洛谷P4723 【模板】线性递推(多项式取模 线性代数)

    题意 题目链接 Sol Orz shadowice 注意,下面的代码自带O(随时TLE)倍大常数.. #include<bits/stdc++.h> #define Pair pair&l ...

  3. 详解Vue.js 技术

    本文主要从8个章节详解vue技术揭秘,小编觉得挺有用的,分享给大家. 为了把 Vue.js 的源码讲明白,课程设计成由浅入深,分为核心.编译.扩展.生态四个方面去讲,并拆成了八个章节,如下: 准备工作 ...

  4. Dynamics AX 2012 性能优化之 SQL Server 复制

    Dynamics AX 2012 性能优化之 SQL Server 复制 分析数据滞后 在博文 Dynamics AX 2012 在BI分析中建立数据仓库的必要性 里,Reinhard 阐述了在 AX ...

  5. 对YUV数据进行裁剪

    项目中用到,用来对YUV数据(图片的yuv或者视频单帧yuv数据)进行裁剪. 格式介绍:http://blog.csdn.net/vblittleboy/article/details/1094514 ...

  6. 运行 python *.py 文件出错,如:python a.py

    运行 python *.py 文件出错,如:python a.py(下图) 原因:没有安装web.py 解决:下载并安装 网址:http://webpy.org/install#install  (h ...

  7. ionic开发中,输入法键盘弹出遮挡住div元素

    采用ionic 开发中,遇到键盘弹出遮挡元素的问题. 以登陆页面为例,输入用户名和密码时,键盘遮挡了登陆按钮. 最终采用自定义指令解决了问题: .directive('popupKeyBoardSho ...

  8. Ext 日期格式化

    //日期格式化 Date.prototype.Format = function (fmt) { var o = { , //月份 "d+": this.getDate(), // ...

  9. 深入了解IOC

    老师在简书写的一篇博客 https://www.jianshu.com/p/79f8331e1f24

  10. 网络互联技术(2)——前篇—【转载】电脑结构和CPU、内存、硬盘三者之间的关系

    原文链接:传送门 详细内容: 电脑结构和CPU.内存.硬盘三者之间的关系 前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑 ...