当前位置: 首页 > 知识库问答 >
问题:

使用web3js和galanche调用具有价值的以太坊智能合约

潘刚洁
2023-03-14

我对以太坊智能合约相当陌生,所以这可能是一个愚蠢的问题,但我需要有人来帮我。我在我的机器(MacOS 11)上设置了Galanche,并使用松露编写了一个非常简单的货币智能合约(我不打算将其用作实际货币,我只是想了解智能合约)。

我已经编译了合同,并成功地将其部署到我的Galanchere区块链中。

现在,我想使用web3.js.与它交互我已经设置了一个nodejs项目并安装了web3。作为第一次测试,我运行了以下脚本:

const Web3 = require("web3");
const fs = require("fs");

const web3 = new Web3("http://192.168.178.49:7545");
const abi = JSON.parse(
  fs.readFileSync("path/to/compiled/MyCoin.json").toString()
).abi;

const MyCoin = new web3.eth.Contract(
  abi,
  // My contract's address
  "0x3265aA0A2c3ac15D0eDd67BC0fa62A446c112F98"
);

(async () => {
  console.log("Starting!");
  var coinCount = await MyCoin.methods
    .getTotalCoins()
    .call({ from: "0x2d0616BF48214513f70236D59000F1b4f395a2Fd" });
  console.log("Current registered MyCoin tokens:", coinCount);
})();

地址0x2d0616BF48214513f70236D59000F1b4f395a2Fd是加拉切向我显示的第一个地址

它像预期的那样工作,并返回默认数量的硬币。

现在,我想运行一种名为“购买MyCoin”的方法,该方法需要付款。我试过跑步:

...

MyCoin
  .methods
  .buyMyCoin
  .send(
    {
      from: '0x2d0616BF48214513f70236D59000F1b4f395a2Fd',
      value: some_amount_of_wei
    }
  );

...

我希望当我再次运行这个node.js脚本时,第一部分会告诉我有

我做错了什么web3.js还是我的合同有问题?

BTW:我没有看到任何资金离开地址0x2d0616BF48214513f70236D59000F1b4f395a2Fd在加兰奇,所以我非常确定这不是我的合同......

我希望在某个地方我必须使用它的公钥登录到这个地址,但是我在web3.js文档中找不到任何不太模糊的东西…

编辑:以下是我的buyMyCoin方法的代码

...
  /**
   * @dev Buy MyCoin
   */
  function buyMyCoin() external payable {
    require(msg.value > 1 gwei, "Minimum transaction is 1 gwei"); // Not very much

    uint256 amount = convert(msg.value, conversionRate, true);

    balances[msg.sender].owner = payable(msg.sender);
    balances[msg.sender].amount += amount;

    totalCoins += amount;
  }
...

共有1个答案

苏麒
2023-03-14

原来只是我太笨了!我试图用极低的以太(4 gwei)来运行交易,当然,以太小了,在Ganache应用程序中看不到。

我没有看到新硬币被创建的原因是因为我的转换代码将结果四舍五入为0。

 类似资料:
  • 我能够使用和在以太坊进行交易。 现在我希望能够与互动。但是,由于构建

  • 我是区块链的新手,我开始开发一种新的代币,我已经看到许多地方讲述了这两个区块链之间的相似之处。我读到BSC与EVM(以太坊虚拟机)兼容,我的问题是,这是否意味着如果我按照教程学习在以太坊区块链上部署智能合约(以Solidity编写)。同样的合同在Binance智能链中也会起作用吗?如果没有,那么在为其中一个和另一个写合同时,主要的区别是什么?非常感谢。

  • 我有一个关于以太坊智能合约版本控制的问题。关于如何将逻辑和数据解耦,如何在引用其他契约时使用接口,如何使用通用键值存储来存储数据,以及如何以强类型方式通过库函数检索数据,已经写了很多文章。 从旧版本的智能合约中查询事务和事件日志怎么样?事务和发出的事件不能迁移。它们是不可变的。也许您需要在客户端应用程序中跟踪它们的历史记录。事件可以在不同的合约版本中添加、删除或更改其签名。您如何处理对多个版本的合

  • 通过java打包以太坊智能合约 Web3j可以自动打包智能合同代码,以便在不脱离JVM的情况下进行以太坊智能合同部署和交互。 要打包代码,需要先编译智能合同: $ solc <contract>.sol --bin --abi --optimize -o <output-dir>/ 然后用web3j的命令行工具打包代码: web3j solidity generate /path/to/<sma

  • 本文翻译自zeppelin的 https://blog.zeppelin.solutions/onward-with-ethereum-smart-contract-security-97a827e47702 如果你是以太坊开发的新手,我们推荐你在继续本文前,先读一下我们的以太坊智能合约指南(基本概念及环境搭建):https://medium.com/bitcorps-blog/the-hitch

  • EIP-20以太坊智能合约通证标准 有一个以太坊标准EIP-20,它是作为一个以太坊改进方案EIP开始的,它定义了提供通证token的智能合约应该执行的标准功能。 EIP-20标准提供函数定义,但不提供示例实现。然而,在codegen/src/test/resources/solidity/contracts中提供了一个实现,这已经从ConsenSys’ Tokens project获得。 开源的