Introducción y entrada de Quick learning-web3.js

web3.js Introducción y primeros pasos

Introducción a web3.js

  • API de la aplicación Web3 JavaScript
  • web3.js es una biblioteca de API de JavaScript. Para hacer que el DApp se ejecute en Ethereum, podemos usar el objeto web3 proporcionado por la biblioteca web3.js
  • web3.js se comunica con los nodos locales a través de llamadas RPC, se puede usar con cualquier nodo Ethereum que exponga la capa RPC
  • web3 contiene eth object-web3.eth (interactuando específicamente con la cadena de bloques Ethereum) y shh object-web3.shh (utilizado para interactuar con Whisper)

carga del módulo web3

  • Primero necesita instalar el módulo web3 en el proyecto:npm install [email protected]
  • Luego cree una instancia de web3 y configure un "proveedor" • Para garantizar que nuestro proveedor de conjuntos MetaMask no se sobrescriba, generalmente hacemos una verificación del entorno actual antes de introducir web3 (tome v0.20.1 como ejemplo):
if (typeof web3 !== 'undefined') {
	web3 = new Web3(web3.currentProvider);
} else {
	web3 = new Web3(new Web3.providers
		.HttpProvider("http://localhost:8545"));
}

Devolución de llamada asincrónica

  • El propósito inicial del diseño de la API web3js es principalmente el uso con nodos RPC locales, por lo que por defecto envía solicitudes HTTP sincrónicas
  • Si desea enviar una solicitud asincrónica, puede pasar una función de devolución de llamada en la última posición de parámetro de la función. La función de devolución de llamada es opcional (optioanl)
  • El estilo de devolución de llamada que generalmente utilizamos es el llamado "error primero", por ejemplo:
web3.eth.getBlock(48, function(error, result) {
	if (!error)
		console.log(JSON.stringify(result));
	else
		console.error(error);
});

Evento de promesa de devolución de llamada (v1.0.0)

Para ayudar a web3 a integrarse en todo tipo de proyectos de diferentes estándares, la versión 1.0.0 proporciona múltiples formas de manejar funciones asincrónicas. La mayoría de los objetos web3 permiten pasar una función de devolución de llamada como el último parámetro de función y devuelven una promesa de llamadas de función encadenadas.

  • Ethereum, como sistema blockchain, tiene diferentes etapas finales en una solicitud. Para cumplir con estos requisitos, la versión 1.0.0 envuelve el valor de retorno de dichas llamadas de función en un "evento prometido" (promiEvent), que es una combinación de promesa y EventEmitter.
  • El uso de PromiEvent es similar a la promesa, y también agregó métodos .on, .once y .off
web3.eth.sendTransaction({
		from: '0x123...',
		data: '0x432...'
	})
	.once('transactionHash', function(hash) { ...
	})
	.once('receipt', function(receipt) { ...
	})
	.on('confirmation', function(confNumber, receipt) { ...
	})
	.on('error', function(error) { ...
	})
	.then(function(receipt) { // will be fired once the receipt is mined });

Interfaz binaria de aplicación (ABI)

web3.js crea un objeto JavaScript a través de la interfaz JSON (Application Binary Interface, ABI) del contrato inteligente Ethereum, que se utiliza para describir en el código js

Las funciones

  • tipo: tipo de función, "función" predeterminada, también puede ser "constructor"
  • constante, pagable, stateMutability: variabilidad de estado de funciones
  • entradas, salidas: lista de descripción de parámetros de entrada y salida de función

Eventos

  • tipo: tipo, siempre "evento"
  • entradas: lista de objetos de entrada, incluyendo nombre, tipo, indexado

Solicitudes por lotes

  • Las solicitudes por lotes nos permiten ordenar las solicitudes y luego procesarlas juntas.
  • Nota: Las solicitudes por lotes no serán más rápidas. De hecho, en algunos casos, es más rápido emitir muchas solicitudes a la vez porque las solicitudes se procesan de forma asincrónica.
  • Las solicitudes de procesamiento por lotes se utilizan principalmente para garantizar el orden de las solicitudes y procesarlas en serie.
var batch = web3.createBatch();
batch.add(web3.eth.getBalance.request('0x0000000000000000
			000000000000000000000000 ', '
			latest ', callback)); 
			batch.add(web3.eth.contract(abi).at(address).balance.request(a ddress, callback2)); batch.execute();

Procesamiento de números grandes (números grandes)

  • La precisión numérica predeterminada en JavaScript es pequeña, por lo que web3.js agregará automáticamente una biblioteca de dependencias BigNumber, específicamente para el procesamiento de números grandes
  • Para valores numéricos, deberíamos usarlo para convertirlo en un objeto BigNumber para tratar
var balance = new 
BigNumber('131242344353464564564574574567456');
// or var balance = web3.eth.getBalance(someAddress); 
balance.plus(21).toString(10); 
//"131242344353464564564574574567477"
  • BigNumber.toString (10) solo conserva la precisión de coma flotante de 20 bits para decimales. Por lo tanto, la práctica recomendada es que siempre usemos wei para representar el equilibrio (entero grande) y solo lo conviertamos en éter u otras unidades cuando sea necesario mostrarlo al usuario

Consulta de información básica de API común

Ver la versión web3

  • v0.2x.x : web3.version.api
  • v1.0.0: web3.version Ver la versión del nodo al que está conectado web3 (clientVersion) • Sincronización: web3.version.node

Asincrónico:

web3.version.getNode((error,result)=>{console.log(result)})
  • v1.0.0: web3.eth.getNodeInfo (). luego (console.log)

Consulta de información básica

Obtener ID de red

  • Sincronización: web3.version.network
  • : : Web3.version.getNetwork ((err, res) => {console.log (res)})
  • v1.0.0: web3.eth.net.getId (). luego (console.log)

Obtenga la versión del protocolo Ethereum del nodo

  • Sincronización: web3.version.ethereum
  • Asíncrono: web3.version.getEthereum ((err, res) => {console.log (res)})
  • v1.0.0: web3.eth.getProtocolVersion (). luego (console.log)

Consulta del estado de la red

Si hay conexión / escucha de nodo, devuelve verdadero / falso

  • Sincronización: web3.isConnect () o web3.net.listening
  • : : Web3.net.getListening ((err, res) => console.log (res))
  • v1.0.0: web3.eth.net.isListening (). luego (console.log)

Ver el nodo par actualmente conectado

  • Sincronización: web3.net.peerCount \
  • : : Web3.net.getPeerCount ((err, res) => console.log (res))
  • v1.0.0: web3.eth.net.getPeerCount (). luego (console.log)

Proveedor

Ver el proveedor web3 configurado actualmente

  • web3.currentProvider

Ver proveedor de web3 de la configuración del entorno del navegador (v1.0.0)

  • web3.givenProvider

Establecer proveedor

  • web3.setProvider (proveedor)
  • web3.setProvider (nuevo web3.providers.HttpProvider ('http: // localhost: 8545'))

método de herramienta universal web3

Conversión de unidades de éter

  • web3.fromWei web3.toWei

Conversión de tipo de datos

  • web3.toString web3.toDecimal web3.toBigNumber

Conversión de codificación de caracteres

  • web3.toHex web3.toAscii web3.toUtf8 web3.fromUtf8

Dirección relacionada

  • web3.isAddress web3.toChecksumAddress

web3.eth-account related

consulta de coinbase

  • Sincronización: web3.eth.coinbase
  • Asincrónico: web3.eth.getCoinbase ((err, res) => console.log (res)) \
  • v1.0.0: web3.eth.getCoinbase (). luego (console.log)

Consulta de cuenta

  • Sincronización: web3.eth.accounts
  • : : Web3.eth.getAccounts ((err, res) => console.log (res))
  • v1.0.0: web3.eth.getAccounts (). luego (console.log)

Bloque relacionado

Consulta de altura de bloque

  • Sincronización: web3.eth. BlockNumber
  • Asíncrono: web3.eth.getBlockNumber (devolución de llamada)

consulta de precios de gas

  • Sincronización: web3.eth.gasPrice
  • Asíncrono: web3.eth.getGasPrice (devolución de llamada)

Consulta de bloque

  • : : Web3.eth.getBlockNumber (hashStringOrBlockNumber [, returnTransactionObjects])
  • : : Web3.eth.getBlockNumber (hashStringOrBlockNumber, devolución de llamada)

Consulta el número de transacciones en el bloque

  • El mismo paso: web3.eth.getBlockTransactionCount (hashStringOrBlockNumber).
  • : : Web3.eth.getBlockTransactionCount (hashStringOrBlockNumber, devolución de llamada)

Transacción relacionada

Consulta de saldo

  • : : Web3.eth.getBalance (addressHexString [, defaultBlock])
  • : : Web3.eth.getBalance (addressHexString [, defaultBlock], callback])

Consulta de la transacción

  • Sincronización: web3.eth.getTransaction (transacciónHash)
  • Asíncrono: web3.eth.getTransaction (transacciónHash [, devolución de llamada])

Ejecución de transacción relacionada

Consulta de recibo de transacción (ya ingresada)

  • Sincronización: web3.eth.getTransactionReceipt (hashString)
  • Asíncrono: web3.eth.getTransactionReceipt (hashString [,

llamar de vuelta])

  • Consumo estimado de gas
  • 同步: web3.eth.estimateGas (callObject)
  • : : Web3.eth.estimateGas (callObject [, callback])

Enviar transacción

  • web3.eth.sendTransaction (transacciónObjeto [, devolución de llamada])

Objeto de transacción:

  • desde: enviar dirección
  • a: dirección de recepción, si está creando una transacción de contrato, puede dejarla en blanco
  • valor: monto de la transacción, en wei, opcional
  • gas: el límite superior de gas consumido por la transacción, opcional
  • gasPrice: precio unitario del gas de transacción, opcional
  • datos: datos de cadena transportados por la transacción, opcional
  • nonce: valor entero nonce, opcional

Llamada de mensaje

  • web3.eth.call (callObject [, defaultBlock] [, callback])

Parámetro:

  • Objeto de llamada: igual que el objeto de transacción, pero desde también es opcional
  • Bloque predeterminado: el "último" predeterminado, puede pasar la altura de bloque especificada
  • Función de devolución de llamada, llamada síncrona si no
var result = web3.eth.call({
			to: "0xc4abd0339eb8d57087278718986382264244252f",
			data: "0xc6888fa100000000000000000000000000000000000000000000000000
			0 0000000000003 " }); 
			console.log(result);

Filtrado de registros (monitoreo de eventos)

web3.eth.filter(filterOptions[, callback])
// filterString 可以是 'latest' or 'pending' 
var filter = web3.eth.filter(filterString);
// 或者可以填入一个日志过滤 options 
var filter = web3.eth.filter(options);
// 监听日志变化
filter.watch(function(error, result) {
	if (!error) console.log(result);
});
// 还可以用传入回调函数的方法,立刻开始监听日志
web3.eth.filter(options, function(error, result) {
	if (!error) console.log(result);
});

Contrato relacionado-crear contrato

web3.eth.contract
var MyContract = web3.eth.contract(abiArray);
// 通过地址初始化合约实例
var contractInstance = MyContract.at(address);
// 或者部署一个新合约
var contractInstance = MyContract.new([constructorParam1]
	[, constructorParam2], {
		data: '0x12345...',
		from: myAccount,
		gas: 1000000
	});

Función de contrato de llamada

  • Puede llamar directamente a la función de contrato a través de la instancia de contrato creada
// 直接调用,自动按函数类型决定用 sendTransaction 还是 call
myContractInstance.myMethod(param1[, param2, ...][,
	transactionObject
][, defaultBlock][, callback]);
// 显式以消息调用形式 call 该函数
myContractInstance.myMethod.call(param1[, param2, ...][,
	transactionObject
][, defaultBlock][, callback]);
// 显式以发送交易形式调用该函数
myContractInstance.myMethod.sendTransaction(param1[,
	param2, ...][, transactionObject][, callback]);

Escuchar eventos contract

  • El evento del contrato es similar al filtro, puede establecer opciones de filtrado para monitorear
var event = myContractInstance.MyEvent({
		valueA: 23
	}
	[, additionalFilterObject])
// 监听事件
event.watch(function(error, result) {
	if (!error) console.log(result);
});
//还可以用传入回调函数的方法,立刻开始监听事件
var event = myContractInstance.MyEvent([{
		valueA: 23
	}]
	[, additionalFilterObject],
	function(error, result) {
		if (!error) console.log(result);
	}
);
2146 artículos originales publicados · Me gusta 2405 · Visita 240,000+

Supongo que te gusta

Origin blog.csdn.net/weixin_42528266/article/details/105528199
Recomendado
Clasificación