Как я могу отправить сообщение на другой адрес Ethereum? И как этот получающий пользователь узнает, что это сообщение? Есть ли кошелек Ethereum, который покажет, что я отправил сообщение на этот адрес? И какой максимальный размер я могу отправить?
data
Таким образом, в поле можно отправлять только HEX-данные . Это не будет стандартной транзакцией, но вам потребуется использовать geth , расширенные настройки MyCrypto на странице отправки или другой клиент, который позволяет вам получать доступ и редактировать data
поле.
Google и посетите сайт ascii->hex и введите свое сообщение.
Скопируйте шестнадцатеричный вывод и удалите все пробелы в этом шестнадцатеричном выводе. Затем вставьте его в data
поле.
На etherscan вы можете щелкнуть «конвертировать в ascii» в нижней части любого TX, в котором есть данные. Однако не все данные представляют собой данные ascii, поэтому иногда это будет тарабарщина.
Я отправил демо здесь . В разделе «полезная нагрузка» вы можете увидеть данные HEX слева и ASCII справа.
Как указано в комментариях euro10 (но это немного трудно читать), вы можете использовать встроенный ascii -> hex, если вы используете geth:
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(100,'finney'),data:web3.toHex('John Doe sent you a message')})
Отправляя сообщение, я предполагаю, что вы имеете в виду, что хотите отправить какое-либо текстовое сообщение другому пользователю...
И альтернативой описанному выше подходу является использование контракта для публикации события в блокчейне. Затем клиент может снова прослушивать эти конкретные события с помощью API web3.js.
Вот как вы могли бы сделать это с API web3.
const Utils = require('web3-utils');
let txTransfer = {};
txTransfer.from = from.address;
txTransfer.to = to.address;
txTransfer.gas = GasLimit;
txTransfer.value = amount;
txTransfer.data = Utils.toHex('free text data');
web3.eth.sendTransaction(txTransfer);
У меня есть рабочий пример на блокчейне по этой транзакции 0x99f537b788c1e0c9513735c644921ffa423f8bd20ce45165403e8f12942aaca8 . Данные ascii в транзакции были тем же JavaScript, который использовался для отправки транзакции.
web3js v1.xx
const txParams = {
nonce: nonce,
gasPrice: gasPrice,
gasLimit: gasLimit,
to: to,
value: value,
data : web3.utils.toHex('rockstar blockchain developer'),
// EIP 155 chainId - mainnet: 1, ropsten: 3
chainId: 4
}
const tx = new ethereumTx(txParams);
tx.sign(privateKey);
const serializedTx = '0x'+tx.serialize().toString('hex')
console.log("serializedTx" ,serializedTx );
web3.eth.sendSignedTransaction(serializedTx);
Хэш Tx успешного примера на тестовой сети rinkeBy 0xbc5ef9dc8da24c90d5910d93419f9746f3fe318cb2f2b5e7c873e64264bfcf53
sendSignedTransaction
вместо просто sendTransaction
? Какие преимущества имеет подписанный?Вы используете Whisper
( https://github.com/ethereum/go-ethereum/wiki/Whisper )
Web3.py
:Я следовал следующему коду ssh-режима .
receiver.py
который работает на узле-1:
from web3 import Web3, HTTPProvider
web3 = Web3(HTTPProvider('http://localhost:8545'))
from web3.shh import Shh
Shh.attach(web3, "shh")
import time, sys;
from hexbytes import (
HexBytes,
)
kId = web3.shh.newKeyPair()
receiver_pub = web3.shh.getPublicKey(kId)
print('receiverPubK: ' + receiver_pub);
topic = '0x07678231'
shh_filter = web3.shh.newMessageFilter({
'privateKeyID': kId,
'topics': [topic]
})
input("Press Enter to continue...");
received_messages = [];
received_messages = shh_filter.get_new_entries()
print(len(received_messages)) # Returns '0'
print(web3.shh.info.memory) # Returns '0'
Выход:
receiverPubK: 0x04226d96bf9857ac0ba429c1e8b480a2811ce47cb526dbd3829d7586e5cae740198ba291f3eca0f279f82db8a136be90ea9ec629ed6cd1d45cc7f873159811757d
Press Enter to continue...
После Node_1
отправки сообщений; Я скопировал напечатанное receiverPublicKey
в receiver_pub
переменную в следующем коде. Я запускаю следующий код на Node 2
. Node 2
отправляет сообщение в сеть. Позже я нажимаю Enter Node_1
и Node_1
печатаю сообщение
from web3 import Web3, HTTPProvider
web3 = Web3(HTTPProvider('http://localhost:8545'))
from web3.shh import Shh
Shh.attach(web3, "shh")
import time, sys;
from hexbytes import (
HexBytes,
)
receiver_pub='0x04226d96bf9857ac0ba429c1e8b480a2811ce47cb526dbd3829d7586e5cae740198ba291f3eca0f279f82db8a136be90ea9ec629ed6cd1'; # obtained from node_1 and assigned here.
topic = '0x07678231'
payloads = [web3.toHex(text="test message :)"), web3.toHex(text="2nd test message")]
web3.shh.post({
'powTarget': 2.5,
'powTime': 2,
'ttl': 60,
'payload': payloads[0],
'topic': topic,
'pubKey': receiver_pub
})
евро10
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(100,'finney'),data:web3.toHex('John Doe sent you a message')})
вы можете увидеть здесь etherchain.org/tx/…Томас Джей Раш
Илья Лоскутов
Степан Яковенко
Пратик Гайквад
тайвано
ГрафическийТочка