ERC20查询操作--获取ERC20 Token的余额

news2024/7/30 4:21:51

获取ERC20 Token的余额

https://blog.csdn.net/wypeng2010/article/details/81362562

  • 通过REST查询
curl -X POST --data-binary '{"jsonrpc":"2.0","method":"eth_call","params":[{"from": "0x954d1a58c7abd4ac8ebe05f59191Cf718eb0cB89","to": "0xee8e2882e07f89685430c27e2f77636b08df3c81","data": "0x70a08231000000000000000000000000954d1a58c7abd4ac8ebe05f59191Cf718eb0cB89"},"latest"],"id":1}' -H 'content-type: application/json;' http://127.0.0.1:18545

{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000143127b10e822e2cbd2000000"}
  • 在geth console中查询

http://cw.hubwiz.com/card/c/web3.js-1.0/1/2/25/

> 
> eth.call({from:"0x954d1a58c7abd4ac8ebe05f59191Cf718eb0cB89", to:"0xee8e2882e07f89685430c27e2f77636b08df3c81", data:"0x70a08231000000000000000000000000954d1a58c7abd4ac8ebe05f59191Cf718eb0cB89"})
"0x000000000000000000000000000000000000000143127b10e822e2cbd2000000"
> 

关于ERC20 标准的解析

https://www.jianshu.com/p/a5158fbfaeb9

  • //代币名字
    function name() constant returns (string name) 
    
    //代币简称
    function symbol() constant returns (string symbol)
    
    //支持几位小数点后几位, balanceOf返回的值除以此值才是真正的余额
    function decimals() constant returns (uint8 decimals)
    
    //发行代币的总量
    function totalSupply() constant returns (uint256 totalSupply)
    
    //输入地址,可以获取该地址代币的余额。
    function balanceOf(address _owner) constant returns (uint256 balance)
    
    //调用transfer函数将自己的token转账给_to地址,_value为转账个数
    function transfer(address _to, uint256 _value) returns (bool success)
    
    
    //--------------------------------------------
    //批准_spender账户从自己的账户转移_value个token。可以分多次转移。
    function approve(address _spender, uint256 _value) returns (bool success)
    
    //与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success)
    
    //返回_spender还能提取token的个数。
    function allowance(address _owner, address _spender) constant returns (uint256 remaining)
    
    //approve、transferFrom及allowance解释:
    //账户A有1000个ETH,想允许B账户随意调用100个ETH。
    //A账户按照以下形式调用approve函数approve(B,100)。
    //当B账户想用这100个ETH中的10个ETH给C账户时,
    //则调用transferFrom(A, C, 10)。这时调用allowance(A, B)
    //可以查看B账户还能够调用A账户多少个token。
    
  • 常用函数的 hash

18160ddd -> totalSupply()
70a08231 -> balanceOf(address)
dd62ed3e -> allowance(address,address)
a9059cbb -> transfer(address,uint256)
095ea7b3 -> approve(address,uint256)
23b872dd -> transferFrom(address,address,uint256)

自己计算

>>> from ethereum.utils import *
>>> 
>>> sha3('name()').encode('hex')[:4*2]
'06fdde03'
>>> 
>>> sha3('symbol()').encode('hex')[:4*2]
'95d89b41'
>>> 
>>> 
>>> sha3('decimals()').encode('hex')[:4*2]
'313ce567'
>>> 
>>> 
>>> sha3('totalSupply()').encode('hex')[:4*2]
'18160ddd'
>>> 
>>> sha3('balanceOf(address)').encode('hex')[:4*2]
'70a08231'
>>> 
>>> 
>>> sha3('allowance(address,address)').encode('hex')[:4*2]
'dd62ed3e'
>>> 
>>> 
>>> sha3('transfer(address,uint256)').encode('hex')[:4*2]
'a9059cbb'
>>> 
>>> 
>>> sha3('approve(address,uint256)').encode('hex')[:4*2]
'095ea7b3'
>>> 
>>> 
>>> sha3('transferFrom(address,address,uint256)').encode('hex')[:4*2]
'23b872dd'
>>> 
>>> 

  • 获取 symbol
> 
> eth.call({from:"0x954d1a58c7abd4ac8ebe05f59191Cf718eb0cB89", to:"0xee8e2882e07f89685430c27e2f77636b08df3c81", data:"0x95d89b41"})
"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003424a430000000000000000000000000000000000000000000000000000000000"

  • 获取小数位数

    > eth.call({from:"0x954d1a58c7abd4ac8ebe05f59191Cf718eb0cB89", to:"0xee8e2882e07f89685430c27e2f77636b08df3c81", data:"0x313ce567"})
    "0x0000000000000000000000000000000000000000000000000000000000000012"
    > 
    
    

关于字符串的解码

//以下是 python3

from eth_utils import to_bytes

encoded = to_bytes(hexstr="0x0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000067374617475730000000000000000000000000000000000000000000000000000")

from eth_abi import decode_abi

decoded = decode_abi(['string', 'uint256'], encoded)

assert decoded == (b'status', 12)
//使用python2实现

def my_to_bytes(hexstr='0x234234'):
	return hexstr.replace('0x', '').decode('hex')

def decode_abi_string(data):
    pass

def ceil32(x: int) -> int:
    return x if x % 32 == 0 else x + 32 - (x % 32)


def encode_string(text):
    b = text.encode('hex')
    padded_value = b.ljust(ceil32(b), '0') #右补0
    encode_size = hex(len(b))[2:].replace('L', '').rjust(64, '0')
    
0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000045553445400000000000000000000000000000000000000000000000000000000
	

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1917132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

防火墙安全策略及用户认证实验

一、实验拓扑 二、实验要求 1、DMZ区内的服务器,办公区仅能在办公时间(9:00-18:00)内可以访问;生产区的设备全天可以访问 2、生产区不允许访问互联网,办公区和游客区允许访问互联网 3、办公区设…

逆向案例十一——华强北登录逆向

网址:aHR0cHM6Ly9wYXNzcG9ydC5ocWV3LmNvbS9sb2dpbg 登陆页面: 打开开发者工具会出现debugger调试: 直接使用一律不再此处暂停即可。点击登录,找到登录包。 发现有三个参数进行了加密,分别是Password,UserName和Devic…

概率论期末速成(知识点+例题)

考试范围 一: 事件关系运算性质全概率公式、贝叶斯公式古典概型 二: 离散分布律连续密度函数性质 -> 解决三个问题(求待定系数、求概率、求密度函数)分布函数 -> 解决三个问题常用分布(最后一节课的那几个分…

Auslogics Disk Defrag Pro v11激活版下载、安装、使用教程 (磁盘碎片整理工具)

前言 Auslogics Disk Defrag Pro 是一款支持 FAT16 文件系统的磁盘碎片整理工具,它可以快速整理磁盘碎片,使磁盘空间更加整洁,显著提升电脑的运行速度。该软件无需任何分析阶段,并且速度比大多数其他碎片整理软件更快。它可以帮助…

算法力扣刷题记录 四十一【N叉树遍历】

前言 依然是遍历问题。由二叉树扩展到N叉树遍历。 记录 四十一【N叉树遍历】 一、【589. N叉树的前序遍历】 题目 给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔…

Node.js_fs模块

文件删除 文件重命名和移动(本质都是修改路径) 文件夹操作 创建文件夹(mkdir) 读取文件夹(readdir) (打印出来是该文件夹下名称的数组形式) 读取当前的文件夹(readdir) 删除文件夹 (rmdir) 查看资源状态…

合合信息大模型加速器亮相WAIC大会:文档解析与文本识别新突破

合合信息大模型加速器亮相WAIC大会:文档解析与文本识别新突破 文章目录 合合信息大模型加速器亮相WAIC大会:文档解析与文本识别新突破前言合合信息TextIn平台:智能文档处理的领军者文档解析引擎:百页文档秒级处理大模型的发展背景…

文件数据跨境传输这些常见问题,要怎么解决?

越来越多的企业和机构面临文件数据跨境传输的场景和需求,数据跨境流通的过程还是比较复杂的,所以在传输过程中会面临各种问题。 比如法律法规和数据保护、技术标准、网络带宽和速度、数据安全风险控制等,企业要如何解决这些问题呢&#xff1…

数据仓库介绍_维度表(三)

维度表概述 维度表是维度建模的基础和灵魂。前文提到,事实表紧紧围绕业务过程进行设计,而维度表则围绕业务过程所处的环境进行设计。维度表主要包含一个主键和各种维度字段,维度字段称为维度属性。 表设计步骤 确定维度(表&…

UI设计工具选择指南:Sketch、XD、Figma、即时设计

在数字产品设计产业链中,UI设计师往往起着连接前后的作用。产品经理从一个“需求”开始,制定一个抽象的产品概念原型。UI设计师通过视觉呈现将抽象概念具体化,完成线框图交互逻辑视觉用户体验,最终输出高保真原型,并将…

2.电容(常见元器件及电路基础知识)

一.电容种类 1.固态电容 这种一般价格贵一些,ESR,ESL比较低,之前项目400W电源用的就是这个,温升能够很好的控制 2.铝电解电容 这种一般很便宜,ESR,ESL相对大一些,一般发热量比较大,烫手。 这种一般比上一个贵一点&am…

this.$confirm不要取消按钮以及右上角的差号

this.$confirm(保存成功! 订单号为:${res.data}, , {confirmButtonText: 确定,showCancelButton: false, // 不显示取消按钮showClose: false, // 不显示右上角的叉号type: success}).then(() > {}) 效果图下:

香港物理服务器租用优势

香港物理服务器租用因其独特的地理位置、先进的网络设施以及优质的服务,成为了众多企业和个人开发者青睐的选择。以下是香港物理服务器租用的主要优势: 稳定性与性能 香港物理服务器直接依赖其高性能硬件运行,不受虚拟化层的影响,…

24小时悬停系留照明无人机技术详解

24小时悬停系留照明无人机是一款专门设计用于提供长时间、高效能照明服务的无人机系统。该系统结合了无人机技术与先进的照明设备,通过系留技术实现无人机的稳定悬停,从而提供连续不断的照明服务。该无人机能够在各种环境条件下进行24小时不间断工作&…

对controller层进行深入学习

目录 1. controller层是干什么的?1.1 controller原理图1.2 controller层为什么要存在?1.2.1 分离关注点1.2.2 响应HTTP请求1.2.3 数据处理与转换1.2.4 错误处理与状态管理1.2.5 流程控制1.2.6 依赖注入与测试 1.3 controller层的优点1.3.1 多端支持1.3.2…

PHP 程序员是学 Swoole ?还是学 Go ?

大家好,我是码农先森。 面临现状 这次为什么要讨论这个话题,因为 Swoole 和 Go 在 PHP 程序员坊间一直都是茶语饭后的谈资,觉得懂 Swoole 和 Go 的就高人一等。相信有很多的 PHP 程序员,自打 Swoole 发布以来就从来没有使用过。…

Z-Fighting 深度冲突权威指南

Z-Fighting 是渲染管道中深度测试中出现的问题。它是由深度值的有限数值精度引起的。故障将表现为不正确的渲染,即屏幕上错误地显示应该被遮挡在另一个后面的对象。故障主要发生在透视投影变换中,但也可能发生在正交投影变换中。到目前为止,一…

GaussDB关键技术原理:高性能(五)

GaussDB关键技术原理:高性能(四)从USTORE存储引擎、计划缓存计划技术、数据分区与分区剪枝、列式存储和向量化引擎、SMP并行执行等五方面对高性能关键技术进行解读,本篇将从LLVM动态查询编译执行、SQL-BYPASS执行优化、线程池化、…

threeJS 点击模型出现弹框

前言 需要实现点击模型出现弹框展示模型详细信息 实现代码 // 创建3D渲染器 - 初始化时调用 function createCss3DRender(){labelRenderer new CSS3DRenderer();labelRenderer.setSize(window.innerWidth, window.innerHeight);labelRenderer.domElement.style.position &…

如何将本地仓库中的文件推送到远程git服务器

第一步:进入所在项目,右击打开"Git Bash Here" 第二步:git config --global user.email "18351810763163.com" // 输入你的名称 第三步:git config --global user.name "chenliang-sam&quo…