Wie kann ich eine Nachricht an eine andere Ethereum-Adresse senden? Und wie würde der empfangende Benutzer wissen, dass es sich um eine Nachricht handelt? Gibt es eine Ethereum-Brieftasche, die anzeigt, dass ich eine Nachricht an diese Adresse gesendet habe? Und was ist die maximale Größe, die ich senden kann?
Es können also nur HEX-Daten im data
Feld gesendet werden. Dies ist keine Standardtransaktion, sondern erfordert die Verwendung von Geth, erweiterten MyCrypto- Einstellungen auf der Sendeseite oder eines anderen Clients, mit dem Sie auf das data
Feld zugreifen und es bearbeiten können.
Google und besuchen Sie eine ASCII->Hex-Site und geben Sie Ihre Nachricht ein.
Kopieren Sie die hexadezimale Ausgabe und entfernen Sie alle Leerzeichen in dieser hexadezimalen Ausgabe. Fügen Sie es dann in das data
Feld ein.
Auf Etherscan können Sie unten in jedem TX, das Daten enthält, auf „In ASCII konvertieren“ klicken. Nicht alle Daten sind jedoch ASCII-Daten, daher wird es manchmal Kauderwelsch geben.
Ich habe hier eine Demo geschickt . Unter „Payload“ sehen Sie links die HEX-Daten und rechts die ASCII-Daten.
Wie euro10 in den Kommentaren betonte (aber es ist etwas schwer zu lesen), können Sie tatsächlich das integrierte ASCII -> Hex verwenden, wenn Sie Geth verwenden:
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(100,'finney'),data:web3.toHex('John Doe sent you a message')})
Ich nehme an, dass Sie mit dem Senden einer Nachricht eine textbasierte Nachricht an einen anderen Benutzer senden möchten ...
Eine Alternative zum obigen Ansatz besteht darin, einen Vertrag zu verwenden, um ein Ereignis in der Blockchain zu veröffentlichen. Ein Client kann dann mithilfe der web3.js-API erneut auf diese spezifischen Ereignisse lauschen.
So würden Sie es mit der web3-API machen.
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);
Ich habe ein funktionierendes Beispiel für die Blockchain bei dieser Transaktion 0x99f537b788c1e0c9513735c644921ffa423f8bd20ce45165403e8f12942aaca8 . Die ASCII-Daten in der Transaktion waren das gleiche JavaScript, das zum Senden der Transaktion verwendet wurde.
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-Hash eines erfolgreichen Beispiels auf rinkeBy test net 0xbc5ef9dc8da24c90d5910d93419f9746f3fe318cb2f2b5e7c873e64264bfcf53
sendSignedTransaction
statt nur sendTransaction
? Welche Vorteile hat der Signierte?Sie verwenden Whisper
( https://github.com/ethereum/go-ethereum/wiki/Whisper )
Web3.py
:Ich habe folgenden SSH-Modus-Code befolgt .
receiver.py
das läuft auf 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,
)
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'
Ausgabe:
receiverPubK: 0x04226d96bf9857ac0ba429c1e8b480a2811ce47cb526dbd3829d7586e5cae740198ba291f3eca0f279f82db8a136be90ea9ec629ed6cd1d45cc7f873159811757d
Press Enter to continue...
Nachdem Node_1
die Nachrichten von gesendet wurden; Ich habe den folgenden Code receiverPublicKey
in eine Variable kopiert . receiver_pub
Ich führe folgenden Code auf Node 2
. Node 2
sendet eine Nachricht an das Netzwerk. Später drücke ich die Eingabetaste Node_1
und Node_1
drucke die Nachricht
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
})
eur10
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(100,'finney'),data:web3.toHex('John Doe sent you a message')})
Sie können hier etherchain.org/tx/… sehen .Thomas JayRush
Ilja Loskutow
Stepan Jakowenko
Pratik Gaikwad
Taywano
GraphicalDot