เปเบเบเบญเบเบเบปเปเบเบเบญเบ 2017, เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบฅเบตเปเบกเบชเปเบฒเบเบเบนเปเบชเบปเปเบเบเปเบฒเบงเบเปเบฝเบงเบเบฑเบ blockchain [เบเบทเปเปเบฅเบฐเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบขเบนเปเปเบเปเบเบฃเปเบเบฅเป] เปเบเบเบเบฒเบเบชเบปเบเบเบฐเบเบฒเบเปเปเปเบเปเบเบฝเบเบซเบผเบฒเบเบเบงเปเบฒเบเบนเปเบชเบปเปเบเบเปเบฒเบง P2P เบเบฅเบฒเบชเบชเบดเบ.
เบเปเบฒเบ 2.5
เบเบต, เปเบฅเบฐเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบขเบทเบเบขเบฑเบเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ: เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ messenger เปเบกเปเบเบกเบตเบขเบนเปเปเบ iOS, Web PWA, Windows, GNU/Linux, Mac OS เปเบฅเบฐ Android.
เบกเบทเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบญเบเบเปเบฒเบเบงเปเบฒ blockchain messenger เปเบฎเบฑเบเบงเบฝเบเปเบเบงเปเบเปเบฅเบฐเบงเบดเบเบตเบเบฒเบเบฅเบนเบเบเปเบฒเบชเบฒเบกเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ API เบเบญเบเบกเบฑเบเปเบเปเปเบเบงเปเบ.
เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเปเบซเป blockchain เปเบเปเปเบเบเบฑเบเบซเบฒเบเบงเบฒเบกเบเบญเบเปเบเปเบฅเบฐเบเบงเบฒเบกเปเบเบฑเบเบชเปเบงเบเบเบปเบงเบเบญเบเบเบนเปเบชเบปเปเบเบเปเบฒเบง P2P เบเบฅเบฒเบชเบชเบดเบ:
- เบเบฅเบดเบเบเบฝเบงเปเบเบทเปเบญเบชเปเบฒเบเบเบฑเบเบเบต - เบเปเปเบกเบตเปเบเบฅเบฐเบชเบฑเบ เบซเบผเบทเบญเบตเปเบกเบง, เบเปเปเบกเบตเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบถเปเบกเบเบตเปเบขเบนเป เบซเบผเบทเบชเบฐเบเบฒเบเบเบตเปเบเบฑเปเบเบเบนเบกเบชเบฒเบ.
- interlocutors เบเปเปเปเบเบตเบเบชเปเบฒเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเปเบเบเบเบปเบ; เบเบฒเบเบชเบทเปเบชเบฒเบเบเบฑเบเบซเบกเบปเบเปเบเบตเบเบเบถเปเบเปเบเบเบเปเบฒเบเบฅเบฐเบเบปเบเบเบฒเบเปเบเบเบขเบฒเบเบเบญเบ nodes. เบเบตเปเบขเบนเป IP เบเบญเบเบเบนเปเปเบเปเบเปเปเบชเบฒเบกเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบฑเบเปเบฅเบฐเบเบฑเบ.
- เบเปเปเบเบงเบฒเบกเบเบฑเบเปเบปเบเบเบทเบเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบเปเบเบ End-to-End curve25519xsalsa20poly1305. เบกเบฑเบเปเบเบดเปเบเบเบทเบงเปเบฒเบเบตเปเบเบฐเบเปเปเปเบเบเปเบเปเบ, เปเบเปเบฅเบฐเบซเบฑเบเปเบซเบผเปเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบกเปเบเปเบเบตเบ.
- เบเบฒเบเปเบเบกเบเบต MITM เปเบกเปเบเบเบทเบเบเบปเบเปเบงเบฑเปเบ - เปเบเปเบฅเบฐเบเปเปเบเบงเบฒเบกเปเบกเปเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเปเบฅเบฐเบเบทเบเปเบเบฑเบเปเบเบ Ed25519 EdDSA.
- เบเปเปเบเบงเบฒเบกเบชเบดเปเบเบชเบธเบเบฅเบปเบเปเบเบเบฅเบฑเบญเบเบเบญเบเบเบปเบเปเบญเบ. เบเบงเบฒเบกเบชเบญเบเบเปเบญเบเปเบฅเบฐ
timestamp
เบเปเบฒเบเบเปเปเบชเบฒเบกเบฒเบเปเบเปเปเบเบเบฑเบเปเบเป, เปเบฅเบฐเบเบฑเปเบเบเบฑเปเบเบเปเบฒเบชเบฑเปเบเบเบญเบเบเปเปเบเบงเบฒเบก. - "เบเปเบญเบเบเปเปเปเบเปเปเบงเบปเปเบฒเปเบเบงเบเบฑเปเบ" เบเบฐเบเปเปเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเปเปเบเบงเบฒเบกเปเบ blockchain.
- เบเปเปเบกเบตเปเบเบเบชเปเบฒเบเบชเบนเบเบเบฒเบเบเบตเปเบเบงเบเบชเบญเบ "เบเบงเบฒเบกเบเบทเบเบเปเบญเบ" เบเบญเบเบเปเปเบเบงเบฒเบก. เบเบตเปเปเบกเปเบเปเบฎเบฑเบเปเบเบเบฅเบฐเบเบปเบเบเบฒเบเปเบเบเบขเบฒเบเบเบญเบ nodes เปเบเบเบญเบตเบเปเบชเปเบเบงเบฒเบกเปเบซเบฑเบเบเบตเปเบซเบฑเบเบเปเบญเบก, เปเบฅเบฐเบกเบฑเบเปเบกเปเบเปเบเบฑเบเปเบเบปเปเบฒเบเบญเบเปเบเบเบเบนเปเปเบเป.
- เปเบเบฑเบเปเบเบเปเปเปเบเปเบเบญเบเบเบฒเบเปเบเบฑเบเปเบเบต - เบเบฑเบเบเบตเบเปเปเบชเบฒเบกเบฒเบเบเบทเบเบเบฅเบฑเบญเบ เปเบฅเบฐเบเปเปเบเบงเบฒเบกเบเปเปเบชเบฒเบกเบฒเบเบเบทเบเบฅเบถเบเปเบเป.
- Blockchain 2FA เปเบเบฑเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเปเบเบฑเบ hellish 2FA เบเปเบฒเบ SMS,
เบเปเบฒเบฅเบฒเบเบชเบธเบเบฐเบเบฒเบเบซเบผเบฒเบ. - เบเบงเบฒเบกโเบชเบฒโเบกเบฒเบโเบเบตเปโเบเบฐโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบชเบปเบโเบเบฐโเบเบฒโเบเบฑเบโเบซเบกเบปเบโเบเบญเบโเบเปเบฒเบโเบเบฒเบโเบญเบธโเบเบฐโเบเบญเบโเปเบโเบซเบเบถเปเบโเปเบโเบเบธเบโเปเบงโเบฅเบฒโเบซเบกเบฒเบโเบเบงเบฒเบกโเบงเปเบฒโเบเปเบฒเบโเบเปเปโเบเปเบฒโเปเบเบฑเบโเบเปเบญเบโเปเบเบฑเบโเบฎเบฑเบโเบชเบฒโเบเบฒเบโเบชเบปเบโเบเบฐโเบเบฒโเปเบโเบเบตเปโเบเบฑเบโเบซเบกเบปเบโ.
- เบขเบทเบเบขเบฑเบเบเบฒเบเบชเบปเปเบเบเปเปเบเบงเบฒเบก. เบเปเปเปเบกเปเบเบญเบธเบเบฐเบเบญเบเบเบญเบเบเบนเปเปเบเป, เปเบเปเบเบฑเบเปเบเบทเบญเบเปเบฒเบ. เปเบเบเบเบทเปเบเบเบฒเบเปเบฅเปเบง, เบเบตเปเปเบกเปเบเบเบฒเบเบขเบทเบเบขเบฑเบเบเบงเบฒเบกเบชเบฒเบกเบฒเบเบเบญเบเบเบนเปเบฎเบฑเบเปเบเบเบฒเบเบญเปเบฒเบเบเปเปเบเบงเบฒเบกเบเบญเบเบเปเบฒเบ. เบเบตเปเปเบกเปเบเบเบธเบเบชเบปเบกเบเบฑเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบปเปเบเบเบฒเบเปเบเปเบเปเบเบทเบญเบเบเบตเปเบชเปเบฒเบเบฑเบ.
เบเบปเบเบเบฐเปเบซเบเบเบเบญเบ Blockchain เบเบฑเบเบเบฐเบเบญเบเบกเบตเบเบฒเบเปเบเบทเปเบญเบกเปเบเบเบขเปเบฒเบเปเบเปเบเบดเบเบเบฑเบ cryptocurrencies Ethereum, Dogecoin, Lisk, Dash, Bitcoin (เบญเบฑเบเบเบตเปเบเบฑเบเบขเบนเปเปเบเบเบงเบฒเบกเบเบทเบเบซเบเปเบฒ) เปเบฅเบฐเบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเบชเบปเปเบ tokens เปเบเบเบฒเบเบชเบปเบเบเบฐเบเบฒ. เบเบงเบเปเบฎเบปเบฒเบเบฑเบเปเบเปเบชเปเบฒเบเบเบปเบงเปเบฅเบเบเปเบฝเบ crypto เบเบตเปเบกเบตเปเบเบเบปเบง.
เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ - เปเบฎเบฑเบเปเบเบงเปเบเบกเบฑเบเบเบฑเบเบซเบกเบปเบเปเบฎเบฑเบเบงเบฝเบ.
เบเปเปเบเบงเบฒเบกเปเบกเปเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒ
เบเบธเบเปเบเบปเบเปเบเปเบเบธเปเบเปเบเบตเบเบเบฑเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเปเบ tokens เบเบฒเบเปเบญเบ blockchain (เบซเบผเบฝเบ) เบเบฒเบเบเบนเปเปเบเปเบซเบเบถเปเบเปเบเบซเบฒเบเบปเบเบญเบทเปเบ. เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบ Bitcoin. เบเบงเบเปเบฎเบปเบฒเปเบเปเบชเปเบฒเบเบเบฐเปเบเบเบเบดเปเบชเบเบเบญเบเบเบธเบฅเบฐเบเปเบฒเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบปเปเบเบเปเปเบเบงเบฒเบก.
เปเบเบทเปเบญเบชเบปเปเบเบเปเปเบเบงเบฒเบกเปเบ messenger เปเบ blockchain, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเปเบฒเบเบซเบผเบฒเบเบเบฑเปเบเบเบญเบ:
- เปเบเบปเปเบฒเบฅเบฐเบซเบฑเบเบเปเปเบเบงเบฒเบก
- เปเบชเป ciphertext เปเบเบปเปเบฒเปเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒ
- เปเบเบฑเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒ
- เบชเบปเปเบเบเบธเบฅเบฐเบเปเบฒเปเบเบซเบฒ node เปเบเบทเบญเบเปเบฒเบเปเบเป
- เบฅเบฐเบเบปเบเบเบฒเบเปเบเบเบขเบฒเบเบเบญเบ nodes เบเปเบฒเบเบปเบ "เบเบงเบฒเบกเบเบทเบเบเปเบญเบ" เบเบญเบเบเปเปเบเบงเบฒเบก
- เบเปเบฒเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบ OK, เบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบตเปเบกเบตเบเปเปเบเบงเบฒเบกเบเบทเบเบฅเบงเบกเบขเบนเปเปเบเบเบฅเบฑเบญเบเบเปเปเปเบ
- เบเบนเปเบฎเบฑเบเบเบถเบเบเปเปเบกเบนเบเบเบธเบฅเบฐเบเปเบฒเบเปเปเบเบงเบฒเบกเปเบฅเบฐเบเบญเบเบฅเบฐเบซเบฑเบ
เบเบฑเปเบโเบเบญเบโเบเบต 1โ3 เปเบฅเบฐ 7 เปเบกเปเบโเบเบฐโเบเบดโเบเบฑเบโเบขเบนเปโเปเบโเบเปเบญเบโเบเบดเปเบโเบเปเบฝเบงโเบเบฑเบโเบฅเบนเบโเบเปเบฒ, เปเบฅเบฐโเบเบฑเปเบโเบเบญเบ 5โ6 เปเบกเปเบโเบเบฐโเบเบดโเบเบฑเบโเบขเบนเปโเปเบโเบเบฒเบโเปเบเบฑเบโเปเบเบปเปเบฒโเบเบฒเบ.
เบเบฒเบเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบเบเปเปเบเบงเบฒเบก
เบเปเปเบเบงเบฒเบกเบเบทเบเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบเบเปเบงเบเบเบฐเปเบเบชเปเบงเบเบเบปเบงเบเบญเบเบเบนเปเบชเบปเปเบ เปเบฅเบฐเบเบฐเปเบเบชเบฒเบเบฒเบฅเบฐเบเบฐเบเบญเบเบเบนเปเบฎเบฑเบ. เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบญเบปเบฒเบฅเบฐเบซเบฑเบเบชเบฒเบเบฒเบฅเบฐเบเบฐเบเบฒเบเปเบเบทเบญเบเปเบฒเบ, เปเบเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบตเป, เบเบฑเบเบเบตเบเบญเบเบเบนเปเบฎเบฑเบเบเปเบญเบเปเบเปเบฎเบฑเบเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบ, เบเบฑเปเบเปเบกเปเบ, เบกเบตเบขเปเบฒเบเบซเบเปเบญเบเบซเบเบถเปเบเบเบธเบฅเบฐเบเปเบฒ. เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเปเบเปเบฒเบฎเปเบญเบเบเป REST เปเบเป GET /api/accounts/getPublicKey?address={ADAMANT address}
, เปเบฅเบฐเปเบเปเบงเบฅเบฒเบเบตเปเปเบซเบฅเบเบเบฒเบเบชเบปเบเบเบฐเบเบฒ, เบเบฐเปเบเบชเบฒเบเบฒเบฅเบฐเบเบฐเบเบญเบ interlocutors เบเบฐเบกเบตเบขเบนเปเปเบฅเปเบง.
Messenger เปเบเบปเปเบฒเบฅเบฐเบซเบฑเบเบเปเปเบเบงเบฒเบกเปเบเบเปเบเป algorithm curve25519xsalsa20poly1305 (
เบเบตเปเปเบกเปเบเบเบปเบงเบขเปเบฒเบเปเบ JavaScript:
/**
* Encodes a text message for sending to ADM
* @param {string} msg message to encode
* @param {*} recipientPublicKey recipient's public key
* @param {*} privateKey our private key
* @returns {{message: string, nonce: string}}
*/
adamant.encodeMessage = function (msg, recipientPublicKey, privateKey) {
const nonce = Buffer.allocUnsafe(24)
sodium.randombytes(nonce)
if (typeof recipientPublicKey === 'string') {
recipientPublicKey = hexToBytes(recipientPublicKey)
}
const plainText = Buffer.from(msg)
const DHPublicKey = ed2curve.convertPublicKey(recipientPublicKey)
const DHSecretKey = ed2curve.convertSecretKey(privateKey)
const encrypted = nacl.box(plainText, nonce, DHPublicKey, DHSecretKey)
return {
message: bytesToHex(encrypted),
nonce: bytesToHex(nonce)
}
}
เบเบฒเบเบชเปเบฒเบเบเบธเบฅเบฐเบเปเบฒเบเปเบงเบเบเปเปเบเบงเบฒเบก
เบเบธเบฅเบฐเบเปเบฒเบกเบตเปเบเบเบชเปเบฒเบเบเบปเปเบงเปเบเบเบฑเปเบเบเปเปเปเบเบเบตเป:
{
"id": "15161295239237781653",
"height": 7585271,
"blockId": "16391508373936326027",
"type": 8,
"block_timestamp": 45182260,
"timestamp": 45182254,
"senderPublicKey": "bd39cc708499ae91b937083463fce5e0668c2b37e78df28f69d132fce51d49ed",
"senderId": "U16023712506749300952",
"recipientId": "U17653312780572073341",
"recipientPublicKey": "23d27f616e304ef2046a60b762683b8dabebe0d8fc26e5ecdb1d5f3d291dbe21",
"amount": 204921300000000,
"fee": 50000000,
"signature": "3c8e551f60fedb81e52835c69e8b158eb1b8b3c89a04d3df5adc0d99017ffbcb06a7b16ad76d519f80df019c930960317a67e8d18ab1e85e575c9470000cf607",
"signatures": [],
"confirmations": 3660548,
"asset": {}
}
เบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเปเปเบเบงเบฒเบก, เบชเบดเปเบเบเบตเปเบชเปเบฒเบเบฑเบเบเบตเปเบชเบธเบเปเบกเปเบ asset
- เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบงเบฒเบเบเปเปเบเบงเบฒเบกเปเบเบงเบฑเบเบเบธ chat
เบกเบตโเปเบเบโเบชเปเบฒเบโ:
message
- เบเปเบงเบโเบเบฐโเบขเบฑเบโเบเปเปโเบเบงเบฒเบกโเปเบเบปเปเบฒโเบฅเบฐโเบซเบฑเบโown_message
- เบเปเปเปเบกเปเบtype
โ เบเบฐโเปเบเบโเบเปเปโเบเบงเบฒเบกโ
เบเปเปเบเบงเบฒเบกเบเบฑเบเบเบทเบเปเบเปเบเบญเบญเบเปเบเบฑเบเบเบฐเปเบเบ. เปเบเบเบเบทเปเบเบเบฒเบเปเบฅเปเบง, เบเบฒเบฅเบฒเบกเบดเปเบเบต type
เบเบญเบเบเปเบฒเบเบงเบดเบเบตเบเบฒเบเปเบเบปเปเบฒเปเบ message
. เบเปเบฒเบเบชเบฒเบกเบฒเบเบชเบปเปเบเบเปเปเบเบงเบฒเบกเบเบฝเบเปเบเป, เบซเบผเบทเบเปเบฒเบเบชเบฒเบกเบฒเบเบชเบปเปเบเบงเบฑเบเบเบธเบเบตเปเบกเบตเบชเบดเปเบเบเบตเปเบซเบเปเบฒเบชเบปเบเปเบเบเบฒเบเปเบ - เบเบปเบงเบขเปเบฒเบ, เบเบตเปเปเบกเปเบเบงเบดเบเบตเบเบตเปเบเบนเปเบชเบปเปเบเบเปเบฒเบงเปเบฎเบฑเบเปเบซเปเบเบฒเบเปเบญเบเปเบเบดเบ cryptocurrency เปเบเบเบฒเบเบชเบปเบเบเบฐเบเบฒ.
เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบเบเบธเบฅเบฐเบเปเบฒ:
{
"transaction": {
"type": 8,
"amount": 0,
"senderId": "U12499126640447739963",
"senderPublicKey": "e9cafb1e7b403c4cf247c94f73ee4cada367fcc130cb3888219a0ba0633230b6",
"asset": {
"chat": {
"message": "cb682accceef92d7cddaaddb787d1184ab5428",
"own_message": "e7d8f90ddf7d70efe359c3e4ecfb5ed3802297b248eacbd6",
"type": 1
}
},
"recipientId": "U15677078342684640219",
"timestamp": 63228087,
"signature": "ััั ะฑัะดะตั ะฟะพะดะฟะธัั"
}
}
เบฅเบฒเบเปเบเบฑเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒ
เปเบเบทเปเบญเบฎเบฑเบเบเบฐเบเบฑเบเบงเปเบฒเบเบธเบเบเบปเบเบกเบตเบเบงเบฒเบกเบซเบกเบฑเปเบเปเบเปเบเบเบงเบฒเบกเบเบทเบเบเปเบญเบเบเบญเบเบเบนเปเบชเบปเปเบเปเบฅเบฐเบเบนเปเบฎเบฑเบ, เปเบงเบฅเบฒเบเบญเบเบเบฒเบเบชเบปเปเบเปเบฅเบฐเปเบเบทเปเบญเปเบเบเบญเบเบเปเปเบเบงเบฒเบก, เบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเปเบเปเบเบทเบเปเบเบฑเบ. เบฅเบฒเบเปเบเบฑเบเบเบดเบเบดเบเบญเบเบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบงเบเบชเบญเบเบเบงเบฒเบกเบเบทเบเบเปเบญเบเบเบญเบเบเบธเบฅเบฐเบเปเบฒเปเบเบเปเบเปเบฅเบฐเบซเบฑเบเบชเบฒเบเบฒเบฅเบฐเบเบฐ - เบฅเบฐเบซเบฑเบเบชเปเบงเบเบเบปเบงเปเบกเปเบเบเปเปเบเปเบฒเปเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบตเป.
เปเบเปเบฅเบฒเบเปเบเบฑเบเบเบปเบงเบกเบฑเบเปเบญเบเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบเปเบเปเบฅเบฐเบซเบฑเบเบชเปเบงเบเบเบปเบง:
เปเบเบเบงเบฒเบเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบญเบดเบ hash เบเบธเบฅเบฐเบเปเบฒเบเบฑเบ SHA-256 เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเปเบเบฑเบเบกเบฑเบ signature
, เปเบฅเบฐ ID เบเบธเบฅเบฐเบเปเบฒเปเบกเปเบเบชเปเบงเบเบซเบเบถเปเบเบเบญเบ SHA-256 hash.
เบเบปเบงเบขเปเบฒเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ:
1 โ เบชเปเบฒเบเบเบฅเบฑเบญเบเบเปเปเบกเบนเบ, เบฅเบงเบกเบเบฑเบเบเปเปเบเบงเบฒเบก
/**
* Calls `getBytes` based on transaction type
* @see privateTypes
* @implements {ByteBuffer}
* @param {transaction} trs
* @param {boolean} skipSignature
* @param {boolean} skipSecondSignature
* @return {!Array} Contents as an ArrayBuffer.
* @throws {error} If buffer fails.
*/
adamant.getBytes = function (transaction) {
...
switch (transaction.type) {
case constants.Transactions.SEND:
break
case constants.Transactions.CHAT_MESSAGE:
assetBytes = this.chatGetBytes(transaction)
assetSize = assetBytes.length
break
โฆ
default:
alert('Not supported yet')
}
var bb = new ByteBuffer(1 + 4 + 32 + 8 + 8 + 64 + 64 + assetSize, true)
bb.writeByte(transaction.type)
bb.writeInt(transaction.timestamp)
...
bb.flip()
var arrayBuffer = new Uint8Array(bb.toArrayBuffer())
var buffer = []
for (var i = 0; i < arrayBuffer.length; i++) {
buffer[i] = arrayBuffer[i]
}
return Buffer.from(buffer)
}
2 - เบเบฑเบ SHA-256 เบเบฒเบเบเบฅเบฑเบญเบเบเปเปเบกเบนเบ
/**
* Creates hash based on transaction bytes.
* @implements {getBytes}
* @implements {crypto.createHash}
* @param {transaction} trs
* @return {hash} sha256 crypto hash
*/
adamant.getHash = function (trs) {
return crypto.createHash('sha256').update(this.getBytes(trs)).digest()
}
3 โ เปเบเบฑเบโเบเบธโเบฅเบฐโเบเปเบฒโ
adamant.transactionSign = function (trs, keypair) {
var hash = this.getHash(trs)
return this.sign(hash, keypair).toString('hex')
}
/**
* Creates a signature based on a hash and a keypair.
* @implements {sodium}
* @param {hash} hash
* @param {keypair} keypair
* @return {signature} signature
*/
adamant.sign = function (hash, keypair) {
return sodium.crypto_sign_detached(hash, Buffer.from(keypair.privateKey, 'hex'))
}
เบเบฒเบเบชเบปเปเบเบเบธเบฅเบฐเบเปเบฒเบเปเบงเบเบเปเปเบเบงเบฒเบกเปเบเบซเบฒเปเบซเบเบเปเบเบทเบญเบเปเบฒเบ
เปเบเบทเปเบญเบเบเบฒเบเปเบเบทเบญเบเปเบฒเบเบเบทเบเปเบเปเบเบเบฑเปเบเบเบธเปเบกเบเบญเบ, เปเบเปเบเบญเบ nodes เบเบตเปเบกเบต API เปเบเบตเบเบเบฐเปเบฎเบฑเบ. เปเบฎเบฑเบเบเบฒเบเบฎเปเบญเบเบเป POST เปเบเบซเบฒเบเบธเบเบชเบดเปเบเบชเบธเบ api/transactions
:
curl 'api/transactions' -X POST
-d 'TX_DATA'
เปเบเบเบฒเบเบเบญเบเบชเบฐเบซเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเปเบฎเบฑเบ ID เบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบญเบเบเบฐเปเบเบ
{
"success": true,
"nodeTimestamp": 63228852,
"transactionId": "6146865104403680934"
}
เบเบฒเบเบเบงเบเบชเบญเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒ
เบฅเบฐเบเบปเบเบเบฒเบเปเบเบเบขเบฒเบเบเบญเบ nodes, เปเบเบเบญเบตเบเปเบชเปเบเบงเบฒเบกเปเบซเบฑเบเบเบตเปเบซเบฑเบเบเปเบญเบก, เบเปเบฒเบเบปเบ "เบเบงเบฒเบกเบเบทเบเบเปเบญเบ" เบเบญเบเบเปเปเบเบงเบฒเบกเบเบธเบฅเบฐเบเปเบฒ. เบเบฒเบเปเบเปเบฅเบฐเปเบ, เปเบงเบฅเบฒเปเบ, เบเปเปเบเบงเบฒเบกเบเบทเบเปเบเบเบเบตเปเบเปเบงเบเบเปเปเบเบงเบฒเบกเบญเบทเปเบ, เปเบฅเบฐเปเบงเบฅเบฒเบเบญเบเบเบฒเบเบชเบปเปเบเบเบทเบเบเบตเปเบเบญเบเบขเปเบฒเบเบเบทเบเบเปเบญเบ. เบเบตเปเปเบกเปเบเบเบฐเปเบซเบเบเบเบตเปเบชเปเบฒเบเบฑเบเบซเบผเบฒเบเบเบญเบ blockchain - เบเปเปเบกเบตเปเบเบเบชเปเบฒเบเบชเบนเบเบเบฒเบเบเบตเปเบฎเบฑเบเบเบดเบเบเบญเบเปเบเบเบฒเบเบเบงเบเบชเบญเบ, เปเบฅเบฐเบฅเปเบฒเบเบฑเบเบเบญเบเบเปเปเบเบงเบฒเบกเปเบฅเบฐเปเบเบทเปเบญเบซเบฒเบเบญเบเบเบงเบเบกเบฑเบเบเปเปเบชเบฒเบกเบฒเบเบเบทเบเบเบญเบกเปเบเบเปเบเป.
เบซเบเปเบฒเบเปเบฒเบญเบดเบ, เบซเบเบถเปเบเปเบ node เบเบงเบเปเบเบดเปเบเบเบงเบฒเบกเบเบทเบเบเปเบญเบ, เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบชเบปเปเบเปเบซเปเบเบนเปเบญเบทเปเบ - เบเปเบฒเบชเปเบงเบเปเบซเบเปเบเบญเบเบงเปเบฒเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเบขเบนเปเปเบเบเปเบฒเบชเบฑเปเบ, เบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบฐเบเบทเบเบฅเบงเบกเบขเบนเปเปเบเบเบฑเบเบเปเปเปเบเบเบญเบเบเปเบญเบเปเบชเป - เบเบตเปเปเบกเปเบเบเบงเบฒเบกเปเบซเบฑเบเบเบตเบเปเบฒ.
เบชเปเบงเบเบเบญเบเบฅเบฐเบซเบฑเบ node เบเบตเปเบฎเบฑเบเบเบดเบเบเบญเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบงเบเบชเบญเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเปเบเปเปเบ GitHub -
เบฅเบงเบกเบเบฑเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบตเปเบกเบตเบเปเปเบเบงเบฒเบกเบขเบนเปเปเบเบเบฅเบฑเบญเบ
เบเปเบฒเบเบฒเบเบเบปเบเบฅเบปเบเปเบซเบฑเบเบเบต, เบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบฑเบเบเปเปเบเบงเบฒเบกเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบทเบเบฅเบงเบกเบขเบนเปเปเบเบเบฅเบฑเบญเบเบเปเปเปเบเบเปเบญเบกเบเบฑเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบตเปเบเบทเบเบเปเบญเบเบญเบทเปเบเป.
เบเบฑเบเบกเบตเบฅเปเบฒเบเบฑเบเบเบตเปเปเบเบฑเปเบเบเบฑเบ, เปเบฅเบฐเปเบเปเบฅเบฐเบเบฑเบเบเปเปเบกเบฒเปเบกเปเบเบชเปเบฒเบเบเบฑเปเบเบเบถเปเบเปเบเบเบญเบตเบเปเบชเป hashes เบเบญเบเบเบฑเบเบเบตเปเบเปเบฒเบเบกเบฒ.
เบเบธเบเบชเปเบฒเบเบฑเบเปเบกเปเบเบงเปเบฒเบเปเปเบเบงเบฒเบกเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบทเบเบฅเบงเบกเบขเบนเปเปเบเบฅเปเบฒเบเบฑเบเบเบตเปเปเบฅเบฐเบเปเปเบชเบฒเบกเบฒเบ "เบเบฑเบเบฅเบฝเบเปเบซเบกเป". เบเปเบฒเบเปเปเบเบงเบฒเบกเบเปเบฒเบเบงเบเบซเบเบถเปเบเบเบปเบเบขเบนเปเปเบเบเบฅเบฑเบญเบ, เบเปเบฒเบชเบฑเปเบเบเบญเบเบเบงเบเปเบเบปเบฒเบเบฐเบเบทเบเบเปเบฒเบเบปเบเปเบเบ timestamp
เบเปเปเบเบงเบฒเบก.
เบเบณเบฅเบฑเบเบญเปเบฒเบเบเปเปเบเบงเบฒเบก
เปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ messenger เบเบถเบเปเบญเบปเบฒเบเบธเบฅเบฐเบเปเบฒเบเบฒเบ blockchain เบเบตเปเบเบทเบเบชเบปเปเบเปเบเบซเบฒเบเบนเปเบฎเบฑเบ. เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเปเปเบฎเบฑเบเบเบธเบเบชเบดเปเบเบชเบธเบ api/chatrooms
.
เบเบธเบฅเบฐเบเปเบฒเบเบฑเบเบซเบกเบปเบเปเบกเปเบเบกเบตเปเบซเปเบเบฑเบเบเบธเบเบเบปเบ - เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเปเบฎเบฑเบเบเปเปเบเบงเบฒเบกเบเบตเปเบเบทเบเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบ. เปเบเปเบเบฝเบเปเบเปเบเบนเปเบฎเบฑเบเบชเบฒเบกเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบเปเบเบเปเบเปเบเบฐเปเบเบชเปเบงเบเบเบปเบงเบเบญเบเบฅเบฒเบง เปเบฅเบฐเบเบฐเปเบเบชเบฒเบเบฒเบฅเบฐเบเบฐเบเบญเบเบเบนเปเบชเบปเปเบ:
**
* Decodes the incoming message
* @param {any} msg encoded message
* @param {string} senderPublicKey sender public key
* @param {string} privateKey our private key
* @param {any} nonce nonce
* @returns {string}
*/
adamant.decodeMessage = function (msg, senderPublicKey, privateKey, nonce) {
if (typeof msg === 'string') {
msg = hexToBytes(msg)
}
if (typeof nonce === 'string') {
nonce = hexToBytes(nonce)
}
if (typeof senderPublicKey === 'string') {
senderPublicKey = hexToBytes(senderPublicKey)
}
if (typeof privateKey === 'string') {
privateKey = hexToBytes(privateKey)
}
const DHPublicKey = ed2curve.convertPublicKey(senderPublicKey)
const DHSecretKey = ed2curve.convertSecretKey(privateKey)
const decrypted = nacl.box.open(msg, nonce, DHPublicKey, DHSecretKey)
return decrypted ? decode(decrypted) : ''
}
เปเบฅเบฐเบญเบฑเบเปเบเบญเบตเบ?
เปเบเบทเปเบญเบเบเบฒเบเบเปเปเบเบงเบฒเบกเบเบทเบเบเบฑเบเบชเบปเปเบเบเปเบงเบเบงเบดเบเบตเบเบตเปเปเบเปเบงเบฅเบฒเบเบฐเบกเบฒเบ 5 เบงเบดเบเบฒเบเบต - เบเบตเปเปเบกเปเบเปเบงเบฅเบฒเบเบตเปเบเบฅเบฑเบญเบเปเบเบทเบญเบเปเบฒเบเปเบซเบกเปเบเบฒเบเบปเบ - เบเบงเบเปเบฎเบปเบฒเบกเบฒเบเปเบญเบกเบเบฑเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเป socket client-to-node เปเบฅเบฐ node-to-node. เปเบกเบทเปเบญ node เปเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเปเบซเบกเป, เบกเบฑเบเบเบฐเบเบงเบเบชเบญเบเบเบงเบฒเบกเบเบทเบเบเปเบญเบเบเบญเบเบกเบฑเบเปเบฅเบฐเบชเบปเปเบเบเปเปเปเบเบซเบฒ nodes เบญเบทเปเบเป. เบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเปเบกเปเบเบกเบตเปเบซเปเบฅเบนเบเบเปเบฒ messenger เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเปเบญเบเบเบตเปเบเบฐเปเบเบฑเบเปเบญเบเบฐเบชเบฑเบเปเบเบตเบเบเบถเปเบเปเบฅเบฐเบฅเบงเบกเบขเบนเปเปเบเบเบฑเบ. เบเปเบงเบเบงเบดเบเบตเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบเบฐเบชเบปเปเบเบเปเปเบเบงเบฒเบกเบเบฑเบเบเบต, เบเบทเบเบฑเบเบเบฑเบเบเบนเปเบชเบปเปเบเบเปเปเบเบงเบฒเบกเบเบฑเบเบเบต.
เปเบเบทเปเบญเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเบทเปเบกเบเบตเปเบขเบนเป, เบเบงเบเปเบฎเบปเบฒเปเบฎเบฑเบ KVS - Key-Value Storage - เบเบตเปเปเบกเปเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบฐเปเบเบเบญเบทเปเบ asset
เบกเบฑเบเบเปเปเปเบกเปเบ NaCl-box เบเบตเปเบเบทเบเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบ, เปเบเป
เบเบฒเบเปเบญเบเปเบเบฅเป/เบฎเบนเบเบเบฒเบ เปเบฅเบฐเบเบฒเบเบชเบปเบเบเบฐเบเบฒเบเบธเปเบกเบเบฑเบเบเปเบญเบเบเบฒเบเบงเบฝเบเบซเบผเบฒเบ. เปเบเปเบเบญเบ, เปเบเบฎเบนเบเปเบเบ blunder-and-blunder เบเบตเปเบชเบฒเบกเบฒเบเปเบเปเบฎเบฑเบเบเบฒเบ "screwed" เบขเปเบฒเบเบงเปเบญเบเปเบง, เปเบเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเบฎเบฑเบเบชเบฒเบฅเบฐเบเบฑเบเบเบฝเบงเบเบฑเบเบเบญเบเบเบงเบฒเบกเปเบเบฑเบเบชเปเบงเบเบเบปเบง.
เปเบกเปเบเปเบฅเปเบง, เบเบฑเบเบกเบตเบงเบฝเบเบเบตเปเบเปเบญเบเปเบฎเบฑเบ - เปเบเบเบซเบฅเบฑเบเบเบฒเบเปเบฅเปเบง, เบเบงเบฒเบกเปเบเบฑเบเบชเปเบงเบเบเบปเบงเบเบตเปเปเบเปเบเบดเบเบชเบปเบกเบกเบธเบเบงเปเบฒเบเบนเปเปเบเปเบเบฐเบเปเปเปเบเบทเปเบญเบกเบเปเปเบเบฑเบ nodes เปเบเบทเบญเบเปเบฒเบเบชเบฒเบเบฒเบฅเบฐเบเบฐ, เปเบเปเบเบฐเบเบปเบเบชเบนเบเบเบปเบเบเบฒเบเบเบญเบเบเบปเบเปเบญเบ. เบญเบฑเบเบเบฒเบชเปเบงเบเบเบญเบเบเบนเปเปเบเปเปเบเบเบตเปเบเปเบฒเบเบเบดเบเบงเปเบฒเปเบฎเบฑเบเบชเบดเปเบเบเบตเป? เบเบทเบเบเปเบญเบเปเบฅเปเบง, 0. เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเปเปเบเปเบเบฒเบเบชเปเบงเบเบเปเบงเบเบชเบฐเบเบฑเบ Tor เบเบญเบเบเบนเปเบชเบปเปเบเบเปเบฒเบง.
เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบดเบชเบนเบเปเบฅเปเบงเบงเปเบฒเบเบนเปเบชเบปเปเบเบเปเบฒเบงเปเบ blockchain เบชเบฒเบกเบฒเบเบกเบตเบขเบนเป. เบเปเบญเบเบซเบเปเบฒเบเบตเป, เบกเบตเบเบฝเบเปเบเปเบซเบเบถเปเบเบเบงเบฒเบกเบเบฐเบเบฒเบเบฒเบกเปเบเบเบต 2012 -
เปเบฅเบฐเบเบงเบฒเบกเบเปเปเบเปเบญเบเปเบเบทเปเบญเบเปเบฒเบเปเปเบกเปเบเบเปเบญเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบเบนเปเบชเบปเปเบเบเปเบฒเบงเปเบ blockchain เปเบกเปเบเบขเบนเปเบเปเบญเบเปเบงเบฅเบฒเบเบญเบเบเบงเบเปเบเบปเบฒ - เบเบฐเบเบฒเบเบปเบเบเปเปเบเปเบญเบกเบเบตเปเบเบฐเบฎเบฑเบเบเบดเบเบเบญเบเบเบฑเบเบเบตเบเบญเบเปเบเบปเบฒเปเบเบปเปเบฒ, เบเบฒเบเปเบเบฑเบเปเบเบปเปเบฒเบเบญเบเบเปเปเบกเบนเบเบชเปเบงเบเบเบธเบเบเบปเบเบเบฑเบเบเปเปเบเบฑเบเปเบเบฑเบเปเบเบงเปเบเปเบก, เปเบฅเบฐเปเบเบฑเบเปเบเปเบฅเบขเบตเบเปเปเบญเบฐเบเบธเบเบฒเบเปเบซเปเบกเบตเบเบงเบฒเบกเปเบงเบชเบนเบเปเบ blockchain. เบเบฒเบเบเบฝเบเบเบฝเบเบเปเบฒเบเปเบเบฑเบเปเบเปเบฅเบขเบตเปเบเบตเปเบกเปเบเบตเบกเบเบญเบเปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบฒเบเบปเบเบเปเปเปเบ. เปเบเบปเปเบฒเบเบฐเปเบซเบฑเบ.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com