Desarrollo de blockchain: JS/TS local | Construcción del entorno del proyecto
Construir el entorno local.
Extensión de solidez de VSCode
Agregue las siguientes dos extensiones a VSCode
Instale Solc, corepack globalmente
Solc se usa para compilar contratos inteligentes (.sol)
npm install -g solc
npm install -g corepack
solcjs --version
corepack --version
VSCode configura Solc local
Abra la configuración para buscar Solidity, configure la versión compilada
C:\Users\用户目录\.vscode\extensions\juanblanco.solidity-0.0.165\node_modules\solc\soljson.js
y modifique la compilación predeterminada alocalFile
Instale Ganache para construir un entorno virtual JS
Dirección: https://trufflesuite.com/ganache/
La velocidad de descarga del sitio web oficial es muy lenta, se recomienda colgar un vpn, o ir a Github y descargar
Github: https://github.com/trufflesuite/ganache-ui
inicio
prueba de proyecto
instalar dependencias
instalar solc, éteres
npm i solc -S
npm i ethers@5.7.2 -S
npm i --save-dev @types/fs-extra
npm i typescript -S
npm i ts-node -S
npm i fs-extra -S
Escribir código
La dirección de rpc es de Ganache
implementar contratotest_blockchain.ts
import {
ethers } from "ethers";
import {
readFileSync } from "fs-extra";
// main fn
const main = async () => {
// http://127.0.0.1:7545
// init rpc provider
const provider = new ethers.providers.JsonRpcProvider(
"http://127.0.0.1:7545"
);
// your wallet
// Get from Ganache
// PrimaryKey : ...
// Address : ...
// Not recommended you use primary key here
// But this just a test
const primary_key: string =
"0x290042e98e1afdbe0f88d2e1146bf7116a1793aa9fa1f315264e5319247bc6ae";
const wallet = new ethers.Wallet(primary_key, provider);
const abi = readFileSync(
"src/binary/src_smart_contract_SimpleStorage_sol_SimpleStorage.abi",
"utf8"
);
const binary = readFileSync(
"src/binary/src_smart_contract_SimpleStorage_sol_SimpleStorage.bin",
"utf8"
);
const contractFactory = new ethers.ContractFactory(abi, binary, wallet);
//deploy
const contract = await contractFactory.deploy({
gasLimit: 3000000 });
};
const methods = {
main,
};
const linearRunner = () => {
methods
.main()
.then(() => {
// exit program
process.exit(0);
})
.catch((e) => {
console.error(e);
process.exit(1);
});
};
linearRunner();
establecer guión
La compilación aquí se usa para compilar el contrato inteligente escrito por solidez, y la implementación es para implementar el contrato.
{
"dependencies": {
"ethers": "^5.7.2",
"fs-extra": "^11.1.1",
"solc": "^0.8.20",
"ts-node": "^10.9.1",
"typescript": "^5.1.6"
},
"scripts": {
"compile": "solcjs --bin --abi --include-path node_modules/ --base-path . -o ./src/binary src/smart_contract/SimpleStorage.sol",
"deploy": "ts-node src/test_blockchain.ts"
},
"devDependencies": {
"@types/fs-extra": "^11.0.1"
}
}
vista de implementación
Error de descripción
1. Error: datos de reversión faltantes
Al principio pensé que este error solo aparecía en la versión 6+, pero fui a Github para verificarlo sin éxito. Otros también encontraron este problema. La solución finalmente se resolvió después de que la modifiqué a la versión 5.7.2, pero esto no es así. la solución correcta, pero agregar un límite de gas durante la implementación para garantizar que el gas sea suficiente lo resolverá, sin importar que la versión 6+ o 5.7.2 esté bien
const contract = await contractFactory.deploy({
gasLimit: 3000000 });
2.Error: no se pudo fusionar el error
Un error de "no se pudo unir el error" por lo general indica que se produjo un error que no se pudo unir durante el procesamiento de la transacción, pero resulta que el contrato inteligente sí se implementó.