web3获取以太坊合约内public变量值

本文介绍了如何在web3中获取以太坊智能合约的public变量,如decimals、name和symbol,主要探讨了本地call方法,无需消耗gas。首先,需要合约的ABI和地址,然后通过调用同名方法获取变量值。然而,由于不同的合约可能对decimals命名不一致,导致无法统一获取,这限制了通用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做侧链项目中需要把合约内的decimals、name和symbol传到侧链,需要根据合约address获取到这三个值,研究了一下怎么获取,记录一下。

获取合约内值有两种方法, 一种是本地call,另外一种是sendTransaction,前者不需要耗费gas,后者需要上链耗费gas,我们使用的场景是本地调用,所以只写前一种。

准备条件

1 合约abi

需要合约源码, 写一个简单的合约:

pragma solidity ^0.4.25;
  
 contract Decimals {
  uint8 public decimals = 18;
}

合约贴到http://remix.ethereum.org,就会生成abi信息,右侧有个ABI,可以复制

[
	{
		"constant": true,
		"inputs": [],
		"name": "decimals",
		"outputs": [
			{
				"name": "",
				"type": "uint8"
			}
		],
		"payable": false,
		"stateMutability": "view",
		"type": "function"
	}
]

2 合约address,已经部署到链上的

比如0x9d013ea462b2f03082afbc39eb352b337359fd5b

3 获取的变量名

比如decimals

 

通过web3获取

源码如下:

    var abiArray = [
	    {
		    "constant": true,
		    "inputs": [],
		    "name": "decimals",
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值