您当前的位置: 首页 >  web3

培根芝士

暂无认证

  • 0浏览

    0关注

    446博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Web3.js与智能合约交互

培根芝士 发布时间:2022-01-07 20:52:34 ,浏览量:0

Web3.js教程:

web3.js - 以太坊 JavaScript API — web3.js 中文文档 — 登链社区https://learnblockchain.cn/docs/web3.js/index.html

Web3js源码:

GitHub - ChainSafe/web3.js: Ethereum JavaScript APIhttps://github.com/ChainSafe/web3.js初始化

cd web3jTest
npm init

下载web3到项目中

npm install web3 --save

交互代码示例:

Nodejs版本:

var Web3 = require('web3');
var provider = new Web3.providers.HttpProvider("http://localhost:7545");

var web3 = new Web3(provider);

var json = require("./contracts/MetaCoin.json");
var contractAddr = '0x9C334Fb3287dA1E6cc063B084c5432985a708999';

var metacoin = new web3.eth.Contract(json['abi'],contractAddr);

var account = "0x060f4e095Eeb77ad987412578652a5201436E3c3";

metacoin.methods.getBalance(account).call({from: account}, function(error, result){
    console.log(error);
    console.log(result);
});

//内网测试
metacoin.methods.buyNow(10000, 1).send({from: account, gas: "300000"}, function(error, transactionHash){
  console.log(error)
  console.log(transactionHash)
});

//公网测试
var functionEncode = metacoin.methods.buyNow(10000, 1).encodeABI();
console.log(functionEncode)
var sign = web3.eth.accounts.signTransaction({
  from: account,
  gasPrice: 20000000000,
  gas: 300000,
  to: contractAddr,
  data: functionEncode,
}, privateKey, function(error, result){
  console.log(error)
  console.log("signTransaction:", result)
  var result = web3.eth.sendSignedTransaction(result.rawTransaction, function(error, result){
    console.log(error)
    console.log("sendSignedTransaction:", result)
  });
});

测试执行

node test.js

执行结果:

null 9500

H5版本:



  const tokenABI = [...];
  var ethereum
  var localAccount
  if (typeof window.ethereum !== 'undefined') {
    console.log('MetaMask is installed!')
    ethereum = window.ethereum
  }
  const contractAddr = '0x28e784AB8FA34321cb78F7F92B8b374646111111';

  //获取当前钱包地址
  ethereumButton.addEventListener('click', () => {
    event.preventDefault()
    ethereum.request({
      method: 'eth_requestAccounts'
    }).then((ret) => {
      localAccount = ret[0]
      console.log('accounts: ', ret)
    })
  })

  getNonceButton.addEventListener('click', (event) => {
    event.preventDefault()
    getBalanceTx()
  })

  buyNowButton.addEventListener('click', (event) => {
    event.preventDefault()
    buyNowTx(10000, 1)
  })




  const buyNowTx = async (artworkId, num) => {
    var web3 = new Web3(ethereum)
    var tokenContract = new web3.eth.Contract(tokenABI, contractAddr)
    var nonceVal = await web3.eth.getTransactionCount(localAccount);
    var ret =  await tokenContract.methods.buyNow(artworkId, num).send({
      from: localAccount,
      nonce: nonceVal,
      gas: 800000
    })
    console.log(ret.transactionHash)
    return ret
  }

  const getBalanceTx = async () => {
    var web3 = new Web3(ethereum)
    var tokenContract = new web3.eth.Contract(tokenABI, contractAddr)
    var balance = await tokenContract.methods.getBalance(localAccount).call()
    console.log("balance:", balance)
    return balance
  }
关注
打赏
1660824269
查看更多评论
立即登录/注册

微信扫码登录

0.0465s