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
inserte la descripción de la imagen aquí

Instale Solc, corepack globalmente

Solc se usa para compilar contratos inteligentes (.sol)

npm install -g solc
npm install -g corepack
solcjs --version
corepack --version

inserte la descripción de la imagen aquí

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
inserte la descripción de la imagen aquí
y modifique la compilación predeterminada alocalFileinserte la descripción de la imagen aquí

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
inserte la descripción de la imagen aquí
inicio
inserte la descripción de la imagen aquí

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

inserte la descripción de la imagen aquí

Escribir código

La dirección de rpc es de Ganache
inserte la descripción de la imagen aquí

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

inserte la descripción de la imagen aquí

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ó.

Supongo que te gusta

Origin blog.csdn.net/qq_51553982/article/details/131494820
Recomendado
Clasificación