首页 > 编程语言 >Python-无ABI文件打包EVM合约方法名及参数方法

Python-无ABI文件打包EVM合约方法名及参数方法

时间:2024-07-24 18:17:34浏览次数:13  
标签:EVM Python ABI keccak param params abi data method

# pip install eth-abi
import eth_abi

# pip install safe-pysha3
from sha3 import keccak_256

def keccak_256_hash(data: str) -> bytes:
	k = keccak_256()
	k.update(data.encode())
	return k.digest()

def pack_abi_data(method: str = None, params: list = None) -> bytes:
	"""
    打包evm合约方法及参数
    :param method: 合约方法,打包合约初始化参数时method=None
    :param params: 合约参数,例如[("uint256": 10000),("address", "0xa166c92f4c8118905ad984919dc683a7bdb295c1")]
    :return: 打包后的数据
    """
	params_data = b''
	types, values = [], []
	if params:
		for param_type, param_value in params:
			types.append(param_type)
			values.append(param_value)
		params_data = eth_abi.encode(tuple(types), tuple(values))

	if method:
		method_sig = f"{method}({','.join(types)})"
		method_id = keccak_256_hash(method_sig)[:4]
		return b'%s%s' % (method_id, params_data)
	return params_data

使用示例

data =  pack_abi_data("updateBalance", params=[
    ("uint256", 10000), 
	("address", "0xa166c92f4c8118905ad984919dc683a7bdb295c1")])
print(data.hex())

标签:EVM,Python,ABI,keccak,param,params,abi,data,method
From: https://www.cnblogs.com/superhin/p/18321436/python_pack_abi_data_without_abi_file

相关文章

  • pycharm配置及python环境相关配置
     python虚拟环境不同项目依赖的第三方包的版本可能不一样,这样一个环境就没法同时开发不同的项目,所以需要创建不同的虚拟环境virtualenv用户创建独立的python环境,多个python项目互相独立互不影响安装方法pipinstallvirtualenv创建虚拟环境virtualenvvenv会......
  • [SUCTF 2019]Pythonginx(url中的unicode漏洞引发的域名安全问题)
    @app.route('/getUrl',methods=['GET','POST'])defgetUrl():#从请求中获取url参数url=request.args.get("url")host=parse.urlparse(url).hostname#第一处检查主机名是否为'suctf.cc'ifhost=='s......
  • Python实现RSA加密算法,让你的信息更加安全
    一、什么是编码    想要实现加密就必须要先了解什么是编码。    编码是信息从另一种形式或格式转换为另一种形式或格式的过程,解码则是编码的逆过程。字符编码(CharacterEncoding)是把字符集中的字符编码为指定集合中的某个对象,以便信息在计算机中传输。在密码......
  • Python 中的工作队列 - 我错过了什么吗?
    这可能会被标记为重复或可能不相关。但我实际上相信这个问题对我和未来缺乏经验的Python开发人员都很重要。由于GIL,用于CPU密集型任务的本地工作队列的概念在Python中至关重要。这方面SE上有明显的答案。使用子进程的方法来绕过缺乏真正的CPU有限并行性的问题。在Pyth......
  • Python ctypes OSError:[WinError 1114]动态链接库(DLL)初始化例程失败
    我试图使用Python中的ctypes库调用C++函数:test.pyfromctypesimport*fromrandomimportrandinttester=cdll.LoadLibrary('./test.dll')print(tester.test(randint(1,100)))test.cpp#include<vector>intcppTest(intnum){std:......
  • Python 的分布式锁管理器
    我有一堆具有多个实例的服务器,这些实例访问的资源对每秒的请求有硬性限制。我需要一种机制来锁定所有正在运行的服务器和实例对此资源的访问。有我在github上找到的一个restful分布式锁管理器:https://github.com/thefab/restful-distributed-lock-manager不幸......
  • 如何在Python中提示self变量的类型
    通常不需要关心Python类成员函数中的self变量,但我正在实现一个装饰器,看起来像defextractor(depends:List[Text]=None,provides:List[Text]=None)->Callable[[ExtractorFunction],Extracto......
  • 将 Python 类型提示限制为元组中的值
    我的方法之一采用status中使用的filter()参数。此参数与定义如下的模型字段相关:STATUS_CHOICES=((1,_("draft")),(2,_("private")),(3,_("published")),)classMyModel(Model):status=models.PositiveSmallIntegerFi......
  • 在python中查找区间数据的中位数
    我正在探索不同的python库,我想知道如何找到分组数据集的近似中值。这里有一个表格供参考。年龄频率1-1012310-203502......
  • 比较Python中的字符串统一特殊字符
    也许我可以使用更好的英语,但我想要的是忽略单词中的重音(和类似的),所以:renè、rené、rene'和rene应该是相同的,所以应该mañana和manana或even-distribuited和evendistribuited,可能还有sho......