ETH以太坊交易内容上链(中文内容)

内容上链

我们想要的效果是每一个交易下面的备注都可以写上我们需要的内容。下图是我们已经可以实现的效果
在这里插入图片描述

  • 交易txid:0x2ad5b2365179e95e78a48441cf3f7f3a93993dc525cb67de40d8888488a090a3
  • 区块浏览器地址:https://www.yitaifang.com/txs/0x2ad5b2365179e95e78a48441cf3f7f3a93993dc525cb67de40d8888488a090a3

交易基础概念

交易推动当前状态到下一状态的转变。在以太坊中有三种交易:

  1. EOA 之间传输值的交易(例如,改变发送方和接收方余额大小)。
  2. 发送消息来调用合约的交易(例如,通过发送消息调用来触发 setter 方法,以设置合约中的值)。
  3. 用于部署合约的交易(由此创建了合约账户)。
    (从技术角度来讲,前两种交易是一样的…它们都是通过消息调用来改变账户状态的交易,只不过一个是 EOA 账户,一个是合约账户。此处将交易分为三种是为了方便读者的理解。)

交易由以下部分组成:
nonce
此账户发出的交易序号数(校对注:可以粗略理解为“这是该账户的第几笔交易”)。
gasPrice
执行此交易、进行计算时为每单位 gas 所支付的费用(以 Wei 计量)。
gasLimit
执行此交易时可以使用的最大 gas 数量。
to

  • 如果此交易用于传送以太币,此处为接收以太币的 EOA 地址。
  • 如果此交易用于向合约发送消息(例如,调用智能合约中的方法),此处为合约的地址。
  • 如果此交易用于创建合约,此处值为空。

value

  • 如果此交易用于收发以太币,此处为发往接收账户以 Wei 计量的代币数量。
  • 如果此交易用于发送对合约的消息调用,此处为向接收此消息智能合约所给付的 Wei 数量。
  • 如果此交易用于创建合约,此处为合约初始化时账户存放的以 Wei 计量的以太币数量。

v, r, s
在交易的密码学签名中用到的值,可以用于确定交易的发送方。

data (16进制文本)
发送消息调用时附带的输入数据(例如,假设你想要执行智能合约中的 setter 方法,数据区就应该包括 setter 方法的标识符,以及你想要设定的参数值)。

内容信息上链基本思路

  1. 发起一笔以太坊交易
  2. 使用json-rpc,或者web3j
  3. 在参数data 内容中做备注,内容上链信息做16进制转换

通过json rpc 发起交易

eth_sendTransaction 创建一个新的消息调用交易,如果数据字段中包含代码,则创建一个合约。

参数Object - 交易对象,结果如下:

  • from: DATA, 20字节 - 发送交易的源地址
  • to: DATA, 20字节 - 交易的目标地址,当创建新合约时可选
  • gas: QUANTITY - 交易执行可用gas量,可选整数,默认值90000,未用gas将返还。
  • gasPrice: QUANTITY - gas价格,可选,默认值:待定(To-Be-Determined)
  • value: QUANTITY - 交易发送的金额,可选整数
  • data: DATA - 合约的编译带啊或被调用方法的签名及编码参数 (16进制文本)
  • nonce: QUANTITY - nonce,可选。可以使用同一个nonce来实现挂起的交易的重写
params: [{
  "from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
  "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
  "gas": "0x76c0", // 30400
  "gasPrice": "0x9184e72a000", // 10000000000000
  "value": "0x9184e72a", // 2441406250
  "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"
}]

通过web3j 交易接口

Transaction transaction= Transaction.createTransaction 创建一个交易事件方法
交易执行接口sendTransaction(Token token, String from, String to, String money, String remarks)

* @param token 代币的具体信息
* @param from  转出账户地址
* @param to    转入账户地址
* @param money 交易金额
* @param remarks 备注信息用于文字相关数据上链
* @return txid 区块链交易id

remarks 内容处理,上链操作

  1. base64 解码,中文传过来的内容使用base64编码,使用时需要解码,放着传输过程数据丢失 解析错误
    Base64.Decoder decoder = Base64.getDecoder();
    String base64 = new String(decoder.decode(remarks), "UTF-8");
    String hex = str2HexStr(base64);
    

​ 2. 将解码后的内容进行16进制转换

/**
 * 字符串转换成为16进制
 * @param str
 * @return
 */
private static String str2HexStr(String str) {
    if (str == null || str.length() < 0) {
        return "";
    }
    char[] chars = "0123456789ABCDEF".toCharArray();
    StringBuilder sb = new StringBuilder("");
    byte[] bs = str.getBytes();
    int bit;
    for (int i = 0; i < bs.length; i++) {
        bit = (bs[i] & 0x0f0) >> 4;
        sb.append(chars[bit]);
        bit = bs[i] & 0x0f;
        sb.append(chars[bit]);
    }
    return sb.toString().trim();
}
  1. send 交易到以太坊

    EthSendTransaction ethSendTransaction=web3.ethSendTransaction(transaction)
        .sendAsync().get()
    
  2. 获取交易txid

    String txid = ethSendTransaction.getTransactionHash();
    
Python以太坊交易是指使用Python编程语言进行以太坊区块链上的交易操作。以太坊是一种基于区块链技术的智能合约平台,它允许开发者构建和部署去中心化应用程序(DApps)。 在Python中,可以使用以太坊的官方库web3.py来进行以太坊交易的编程操作。web3.py提供了一系列的API,可以与以太坊节点进行通信,并执行各种操作,包括创建账户、发送交易、查询余额等。 以下是一个简单的Python代码示例,展示了如何使用web3.py库发送以太坊交易: ```python from web3 import Web3 # 连接到以太坊节点 w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/your_infura_project_id')) # 设置发送方账户私钥和接收方地址 private_key = 'your_private_key' receiver_address = '0x1234567890abcdef1234567890abcdef12345678' # 构建交易参数 transaction = { 'to': receiver_address, 'value': w3.toWei(1, 'ether'), 'gas': 21000, 'gasPrice': w3.toWei('50', 'gwei'), 'nonce': w3.eth.getTransactionCount(w3.eth.accounts), } # 签名交易 signed_transaction = w3.eth.account.signTransaction(transaction, private_key) # 发送交易 transaction_hash = w3.eth.sendRawTransaction(signed_transaction.rawTransaction) # 等待交易确认 transaction_receipt = w3.eth.waitForTransactionReceipt(transaction_hash) # 打印交易结果 print('交易成功,交易哈希:', transaction_receipt.transactionHash.hex()) ``` 上述代码中,首先使用`Web3`类连接到以太坊节点。然后设置发送方账户的私钥和接收方地址。接下来,构建交易参数,包括接收方地址、转账金额、燃气限制、燃气价格和交易序号。然后使用发送方账户的私钥对交易进行签名,并发送签名后的交易以太坊网络。最后,等待交易被确认,并打印交易结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风抚云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值