2017 เชจเซ เชถเชฐเซเชเชคเชฎเชพเช, เช เชฎเซ เชเซเชฒเชพเชธเชฟเช P2P เชฎเซเชธเซเชจเซเชเชฐเซเชธ เชชเชฐเชจเชพ เชซเชพเชฏเชฆเชพเชเชจเซ เชเชฐเซเชเชพ เชเชฐเซเชจเซ เชฌเซเชฒเซเชเชเซเชจ [เชจเชพเชฎ เช เชจเซ เชฒเชฟเชเช เชชเซเชฐเซเชซเชพเชเชฒเชฎเชพเช เชเซ] เชชเชฐ เชฎเซเชธเซเชจเซเชเชฐ เชฌเชจเชพเชตเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซเชฏเซเช.
เชชเชพเชธ เชฅเชฏเชพ 2.5
เชตเชฐเซเชท, เช
เชจเซ เช
เชฎเซ เช
เชฎเชพเชฐเชพ เชเซเชฏเชพเชฒเชจเซ เชชเซเชทเซเชเชฟ เชเชฐเชตเชพเชฎเชพเช เชธเชเซเชทเชฎ เชนเชคเชพ: เชฎเซเชธเซเชจเซเชเชฐ เชเชชเซเชฒเชฟเชเซเชถเชจ เชนเชตเซ iOS, Web PWA, Windows, GNU/Linux, Mac OS เช
เชจเซ Android เชฎเชพเชเซ เชเชชเชฒเชฌเซเชง เชเซ.
เชเชเซ เช
เชฎเซ เชคเชฎเชจเซ เชเชฃเชพเชตเซเชถเซเช เชเซ เชฌเซเชฒเซเชเชเซเชจ เชฎเซเชธเซเชจเซเชเชฐ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเซ เชเซ เช
เชจเซ เชเซเชฒเชพเชฏเชเช เชเชชเซเชฒเซเชเซเชถเชจ เชคเซเชจเชพ API เชธเชพเชฅเซ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเซ เชถเชเซ เชเซ.
เช
เชฎเซ เชเชเซเชเซเช เชเซเช เชเซ เชฌเซเชฒเซเชเชเซเชจ เชเซเชฒเชพเชธเชฟเช P2P เชฎเซเชธเซเชจเซเชเชฐเซเชธเชจเซ เชธเซเชฐเชเซเชทเชพ เช
เชจเซ เชเซเชชเชจเซเชฏเชคเชพเชจเชพ เชฎเซเชฆเซเชฆเชพเชเชจเซ เชนเชฒ เชเชฐเซ:
- เชเชเชพเชเชจเซเช เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชเช เชเซเชฒเชฟเช - เชเซเช เชซเซเชจ เช เชฅเชตเชพ เชเชฎเซเชฒ เชจเชนเซเช, เชธเชฐเชจเชพเชฎเชพเช เชชเซเชธเซเชคเชเซ เช เชฅเชตเชพ เชญเซเชเซเชฒเชฟเช เชธเซเชฅเชพเชจเซเชจเซ เชเชเซเชธเซเชธ เชจเชนเซเช.
- เชเชจเซเชเชฐเชฒเซเชเซเชฏเซเชเชฐเซเชธ เชเซเชฏเชพเชฐเซเชฏ เชธเซเชงเชพ เชเซเชกเชพเชฃเซ เชธเซเชฅเชพเชชเชฟเชค เชเชฐเชคเชพ เชจเชฅเซ; เชคเชฎเชพเชฎ เชธเชเชเชพเชฐ เชเชพเชเช เซเชจเซ เชตเชฟเชคเชฐเชฟเชค เชธเชฟเชธเซเชเชฎ เชฆเซเชตเชพเชฐเชพ เชฅเชพเชฏ เชเซ. เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเชจเชพ IP เชธเชฐเชจเชพเชฎเชพเช เชเชเชฌเซเชเชพเชจเซ เชเชเซเชธเซเชธเชฟเชฌเชฒ เชจเชฅเซ.
- เชฌเชงเชพ เชธเชเชฆเซเชถเชพเช Encrypted End-to-End curve25519xsalsa20poly1305 เชเซ. เชเชตเซเช เชฒเชพเชเซ เชเซ เชเซ เชเชจเชพเชฅเซ เชเซเชเชจเซ เชเชถเซเชเชฐเซเชฏ เชฅเชถเซ เชจเชนเซเช, เชชเชฐเชเชคเซ เช เชฎเชพเชฐเซ เชธเซเชฐเซเชค เชเซเชก เชเซเชฒเซเชฒเซ เชเซ.
- MITM เชนเซเชฎเชฒเชพเชจเซ เชฌเชพเชเชพเชค เชฐเชพเชเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชเซ - เชฆเชฐเซเช เชธเชเชฆเซเชถ เชเช เชตเซเชฏเชตเชนเชพเชฐ เชเซ เช เชจเซ เชคเซ Ed25519 EdDSA เชฆเซเชตเชพเชฐเชพ เชธเชนเซ เชฅเชฏเซเชฒ เชเซ.
- เชธเชเชฆเซเชถ เชคเซเชจเชพ เชชเซเชคเชพเชจเชพ เชฌเซเชฒเซเชเชฎเชพเช เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เชเซ. เชธเซเชธเชเชเชคเชคเชพ เช
เชจเซ
timestamp
เชคเชฎเซ เชฌเซเชฒเซเชเซเชธเชจเซ เช เซเช เชเชฐเซ เชถเชเชคเชพ เชจเชฅเซ, เช เชจเซ เชคเซเชฅเซ เชธเชเชฆเซเชถเชพเชเชจเซ เชเซเชฐเชฎ. - "เชฎเซเช เชเชนเซเชฏเซเช เชจเชฅเซ เชเซ" เชฌเซเชฒเซเชเชเซเชจ เชชเชฐเชจเชพ เชธเชเชฆเซเชถเชพเช เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชถเซ เชจเชนเซเช.
- เชคเซเชฏเชพเช เชเซเช เชเซเชจเซเชฆเซเชฐเซเชฏ เชฎเชพเชณเชเซเช เชจเชฅเซ เชเซ เชเซ เชธเชเชฆเซเชถเชจเซ "เชชเซเชฐเชฎเชพเชฃเชฟเชเชคเชพ" เชคเชชเชพเชธเซ. เช เชธเชฐเซเชตเชธเชเชฎเชคเชฟ เชชเชฐ เชเชงเชพเชฐเชฟเชค เชจเซเชกเซเชธเชจเซ เชตเชฟเชคเชฐเชฟเชค เชธเชฟเชธเซเชเชฎ เชฆเซเชตเชพเชฐเชพ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เช เชจเซ เชคเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเชจเซ เชฎเชพเชฒเชฟเชเซเชจเซ เชเซ.
- เชธเซเชจเซเชธเชฐเชถเซเชชเชจเซ เช เชถเชเซเชฏเชคเชพ - เชเชเชพเชเชจเซเชเซเชธ เช เชตเชฐเซเชงเชฟเชค เชเชฐเซ เชถเชเชพเชคเชพ เชจเชฅเซ เช เชจเซ เชธเชเชฆเซเชถเชพ เชเชพเชขเซ เชถเชเชพเชคเชพ เชจเชฅเซ.
- เชฌเซเชฒเซเชเชเซเชจ 2FA เช SMS เชฆเซเชตเชพเชฐเชพ เชจเชฐเช 2FA เชจเซ เชตเชฟเชเชฒเซเชช เชเซ,
เชเชฃเซเช เชธเซเชตเชพเชธเซเชฅเซเชฏ เชฌเชเชพเชกเซเชฏเซเช. - เชเซเชเชชเชฃ เชธเชฎเชฏเซ เชเซเชเชชเชฃ เชเชชเชเชฐเชฃเชฎเชพเชเชฅเซ เชคเชฎเชพเชฐเซ เชฌเชงเซ เชตเชพเชคเชเซเชคเซ เชฎเซเชณเชตเชตเชพเชจเซ เชเซเชทเชฎเชคเชพเชจเซ เช เชฐเซเชฅ เชเซ เชเซ เชคเชฎเชพเชฐเซ เชตเชพเชฐเซเชคเชพเชฒเชพเชชเชจเซ เชธเซเชฅเชพเชจเชฟเช เชฐเซเชชเซ เชธเชเชเซเชฐเชนเชฟเชค เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชจเชฅเซ.
- เชธเชเชฆเซเชถ เชตเชฟเชคเชฐเชฃเชจเซ เชชเซเชทเซเชเชฟ. เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเชพ เชเชชเชเชฐเชฃ เชชเชฐ เชจเชนเซเช, เชชเชฐเชเชคเซ เชจเซเชเชตเชฐเซเช เชชเชฐ. เชเชตเชถเซเชฏเชเชชเชฃเซ, เช เชคเชฎเชพเชฐเซ เชธเชเชฆเซเชถ เชตเชพเชเชเชตเชพเชจเซ เชชเซเชฐเชพเชชเซเชคเชเชฐเซเชคเชพเชจเซ เชเซเชทเชฎเชคเชพเชจเซ เชชเซเชทเซเชเชฟ เชเซ. เชจเชฟเชฐเซเชฃเชพเชฏเช เชธเซเชเชจเชพเช เชฎเซเชเชฒเชตเชพ เชฎเชพเชเซ เช เชเช เชเชชเชฏเซเชเซ เชธเซเชตเชฟเชงเชพ เชเซ.
เชฌเซเชฒเซเชเชเซเชจ เชฒเชพเชญเซเชฎเชพเช เชเซเชฐเชฟเชชเซเชเซเชเชฐเชจเซเชธเซ Ethereum, Dogecoin, Lisk, Dash, Bitcoin (เช เชนเชเซ เชเชพเชฒเซ เชเซ) เช เชจเซ เชเซเชเชฎเชพเช เชเซเชเชจเซเชธ เชฎเซเชเชฒเชตเชพเชจเซ เชเซเชทเชฎเชคเชพ เชธเชพเชฅเซ เชเชพเชข เชเชเซเชเชฐเชฃเชจเซ เชชเชฃ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ. เช เชฎเซ เชฌเชฟเชฒเซเช-เชเชจ เชเซเชฐเชฟเชชเซเชเซ เชเชเซเชธเซเชเซเชจเซเชเชฐ เชชเชฃ เชฌเชจเชพเชตเซเชฏเซเช เชเซ.
เช เชจเซ เชชเชเซ - เชคเซ เชฌเชงเซเช เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ.
เชธเชเชฆเซเชถ เช เชเช เชตเซเชฏเชตเชนเชพเชฐ เชเซ
เชฆเชฐเซเช เชตเซเชฏเชเซเชคเชฟ เชชเชนเซเชฒเชพเชฅเซ เช เช เชนเชเซเชเชคเชฅเซ เชเซเชตเชพเชฏเซเชฒเซเช เชเซ เชเซ เชฌเซเชฒเซเชเชเซเชจเชฎเชพเช เชตเซเชฏเชตเชนเชพเชฐเซ เชเซเชเชจเซเชธ (เชธเชฟเชเซเชเชพ) เชเช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชฅเซ เชฌเซเชเชพเชฎเชพเช เชเซเชฐเชพเชจเซเชธเชซเชฐ เชเชฐเซ เชเซ. เชฌเชฟเชเชเซเชเชจเชจเซ เชเซเชฎ. เช เชฎเซ เชธเชเชฆเซเชถเชพเช เชเซเชฐเชพเชจเซเชธเชฎเชฟเช เชเชฐเชตเชพ เชฎเชพเชเซ เชเช เชเชพเชธ เชชเซเชฐเชเชพเชฐเชจเซ เชตเซเชฏเชตเชนเชพเชฐ เชฌเชจเชพเชตเซเชฏเซ เชเซ.
เชฌเซเชฒเซเชเชเซเชจ เชชเชฐ เชฎเซเชธเซเชจเซเชเชฐเชฎเชพเช เชธเชเชฆเซเชถ เชฎเซเชเชฒเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชเชฃเชพ เชชเชเชฒเชพเชเชฎเชพเชเชฅเซ เชชเชธเชพเชฐ เชฅเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ:
- เชธเชเชฆเซเชถ เชเซเชเซเชธเซเช เชเชจเซเชเซเชฐเชฟเชชเซเช เชเชฐเซ
- เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจเชฎเชพเช เชธเชฟเชซเชฐเชเซเชเซเชธเซเช เชฎเซเชเซ
- เชตเซเชฏเชตเชนเชพเชฐ เชชเชฐ เชธเชนเซ เชเชฐเซ
- เชเซเชเชชเชฃ เชจเซเชเชตเชฐเซเช เชจเซเชก เชชเชฐ เชตเซเชฏเชตเชนเชพเชฐ เชฎเซเชเชฒเซ
- เชจเซเชกเซเชธเชจเซ เชตเชฟเชคเชฐเชฟเชค เชธเชฟเชธเซเชเชฎ เชธเชเชฆเซเชถเชจเซ "เช เชงเชฟเชเซเชคเชคเชพ" เชจเชเซเชเซ เชเชฐเซ เชเซ
- เชเซ เชฌเชงเซเช เชฌเชฐเชพเชฌเชฐ เชเซ, เชคเซ เชธเชเชฆเซเชถ เชธเชพเชฅเซเชจเซ เชตเซเชฏเชตเชนเชพเชฐ เชเชเชพเชฎเซ เชฌเซเชฒเซเชเชฎเชพเช เชถเชพเชฎเซเชฒ เชเซ
- เชชเซเชฐเชพเชชเซเชคเชเชฐเซเชคเชพ เชธเชเชฆเซเชถ เชตเซเชฏเชตเชนเชพเชฐ เชชเซเชจเชเชชเซเชฐเชพเชชเซเชค เชเชฐเซ เชเซ เช เชจเซ เชกเชฟเชเซเชฐเชฟเชชเซเช เชเชฐเซ เชเซ
เชธเซเชเซเชช 1โ3 เช เชจเซ 7 เชเซเชฒเชพเชเชจเซเช เชชเชฐ เชธเซเชฅเชพเชจเชฟเช เชฐเซเชคเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เช เชจเซ เชธเซเชเซเชช 5โ6 เชนเซเชธเซเช เชชเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชธเชเชฆเซเชถ เชเชจเซเชเซเชฐเชฟเชชเซเชถเชจ
เชธเชเชฆเซเชถ เชชเซเชฐเซเชทเชเชจเซ เชเชพเชจเชเซ เชเซ เช
เชจเซ เชชเซเชฐเชพเชชเซเชคเชเชฐเซเชคเชพเชจเซ เชธเชพเชฐเซเชตเชเชจเชฟเช เชเซ เชธเชพเชฅเซ เชเชจเชเซเชฐเชฟเชชเซเช เชฅเชฏเซเชฒ เชเซ. เช
เชฎเซ เชจเซเชเชตเชฐเซเชเชฎเชพเชเชฅเซ เชธเชพเชฐเซเชตเชเชจเชฟเช เชเซ เชฒเชเชถเซเช, เชชเชฐเชเชคเซ เช เชฎเชพเชเซ, เชชเซเชฐเชพเชชเซเชคเชเชฐเซเชคเชพเชจเซเช เชเชพเชคเซเช เชถเชฐเซ เชเชฐเชตเซเช เชเชตเชถเซเชฏเช เชเซ, เชเชเชฒเซ เชเซ, เชเชเชพเชฎเชพเช เชเชเซเช เชเช เชตเซเชฏเชตเชนเชพเชฐ เชนเซเชตเซ เชเซเชเช. เชคเชฎเซ REST เชตเชฟเชจเชเชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ GET /api/accounts/getPublicKey?address={ADAMANT address}
, เช
เชจเซ เชเซเชเซเชธ เชฒเซเชก เชเชฐเชคเซ เชตเชเชคเซ, เชเชจเซเชเชฐเชฒเซเชเซเชฏเซเชเชฐเซเชธเชจเซ เชธเชพเชฐเซเชตเชเชจเชฟเช เชเซเช เชชเชนเซเชฒเซเชฅเซ เช เชเชชเชฒเชฌเซเชง เชนเชถเซ.
เชฎเซเชธเซเชจเซเชเชฐ 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
. เชคเชฎเซ เชซเชเซเชค เชเช เชเซเชเซเชธเซเช เชฎเซเชเชฒเซ เชถเชเซ เชเซ, เช
เชฅเชตเชพ เชคเชฎเซ เช
เชเชฆเชฐเชจเซ เชฐเชธเชชเซเชฐเชฆ เชตเชธเซเชคเซเช เชธเชพเชฅเซ เชเชฌเซเชเซเชเซเช เชฎเซเชเชฒเซ เชถเชเซ เชเซ - เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เช เชฐเซเชคเซ เชฎเซเชธเซเชจเซเชเชฐ เชเซเชเซเชธเชฎเชพเช เชเซเชฐเชฟเชชเซเชเซเชเชฐเชจเซเชธเซ เชเซเชฐเชพเชจเซเชธเชซเชฐ เชเชฐเซ เชเซ.
เชชเชฐเชฟเชฃเชพเชฎเซ, เช เชฎเซ เชเช เชตเซเชฏเชตเชนเชพเชฐ เชฌเชจเชพเชตเซเช เชเซเช:
{
"transaction": {
"type": 8,
"amount": 0,
"senderId": "U12499126640447739963",
"senderPublicKey": "e9cafb1e7b403c4cf247c94f73ee4cada367fcc130cb3888219a0ba0633230b6",
"asset": {
"chat": {
"message": "cb682accceef92d7cddaaddb787d1184ab5428",
"own_message": "e7d8f90ddf7d70efe359c3e4ecfb5ed3802297b248eacbd6",
"type": 1
}
},
"recipientId": "U15677078342684640219",
"timestamp": 63228087,
"signature": "ััั ะฑัะดะตั ะฟะพะดะฟะธัั"
}
}
เชตเซเชฏเชตเชนเชพเชฐ เชธเชนเซ
เชฆเชฐเซเช เชตเซเชฏเชเซเชคเชฟเชจเซ เชชเซเชฐเซเชทเช เช เชจเซ เชชเซเชฐเชพเชชเซเชคเชเชฐเซเชคเชพเชจเซ เช เชงเชฟเชเซเชคเชคเชพ, เชฎเซเชเชฒเชตเชพเชจเซ เชธเชฎเชฏ เช เชจเซ เชธเชเชฆเซเชถเชจเซ เชธเชพเชฎเชเซเชฐเซเชฎเชพเช เชตเชฟเชถเซเชตเชพเชธ เชเซ เชคเซเชจเซ เชเชพเชคเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ, เชตเซเชฏเชตเชนเชพเชฐ เชชเชฐ เชนเชธเซเชคเชพเชเซเชทเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชกเชฟเชเชฟเชเชฒ เชนเชธเซเชคเชพเชเซเชทเชฐ เชคเชฎเชจเซ เชธเชพเชฐเซเชตเชเชจเชฟเช เชเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชตเซเชฏเชตเชนเชพเชฐเชจเซ เช เชงเชฟเชเซเชคเชคเชพ เชเชเชพเชธเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ - เช เชฎเชพเชเซ เชเชพเชจเชเซ เชเซเชจเซ เชเชฐเซเชฐ เชจเชฅเซ.
เชชเชฐเชเชคเซ เชนเชธเซเชคเชพเชเซเชทเชฐ เชชเซเชคเซ เชเชพเชจเชเซ เชเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ:
เชกเชพเชฏเชพเชเซเชฐเชพเชฎ เชฌเชคเชพเชตเซ เชเซ เชเซ เชเชชเชฃเซ เชธเซ เชชเซเชฐเชฅเชฎ SHA-256 เชธเชพเชฅเซ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชนเซเชถ เชเชฐเซเช เชเซเช เช
เชจเซ เชชเชเซ เชคเซเชจเชพ เชชเชฐ เชธเชนเซ เชเชฐเซเช เชเซเช signature
, เช
เชจเซ เชตเซเชฏเชตเชนเชพเชฐ ID SHA-256 เชนเซเชถเชจเซ เชญเชพเช เชเซ.
เชเชฆเชพเชนเชฐเชฃ เช เชฎเชฒเซเชเชฐเชฃ:
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'))
}
เชจเซเชเชตเชฐเซเช เชจเซเชก เชชเชฐ เชธเชเชฆเซเชถ เชธเชพเชฅเซ เชตเซเชฏเชตเชนเชพเชฐ เชฎเซเชเชฒเซ เชฐเชนเซเชฏเซเช เชเซ
เชจเซเชเชตเชฐเซเช เชตเชฟเชเซเชจเซเชฆเซเชฐเชฟเชค เชนเซเชตเชพเชฅเซ, เชเชชเชจ API เชธเชพเชฅเซเชจเชพ เชเซเชเชชเชฃ เชจเซเชกเซเชธ เชเชฐเชถเซ. เช
เชเชคเชฟเชฎ เชฌเชฟเชเชฆเซ เชชเชฐ POST เชตเชฟเชจเชเชคเซ เชเชฐเชตเซ api/transactions
:
curl 'api/transactions' -X POST
-d 'TX_DATA'
เชเชตเชพเชฌเชฎเชพเช เช เชฎเชจเซ เชชเซเชฐเชเชพเชฐเชจเซเช เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ ID เชชเซเชฐเชพเชชเซเชค เชฅเชถเซ
{
"success": true,
"nodeTimestamp": 63228852,
"transactionId": "6146865104403680934"
}
เชตเซเชฏเชตเชนเชพเชฐ เชฎเชพเชจเซเชฏเชคเชพ
เชจเซเชกเซเชธเชจเซ เชตเชฟเชคเชฐเชฟเชค เชธเชฟเชธเซเชเชฎ, เชธเชฐเซเชตเชธเชเชฎเชคเชฟเชจเชพ เชเชงเชพเชฐเซ, เชตเซเชฏเชตเชนเชพเชฐ เชธเชเชฆเซเชถเชจเซ "เช เชงเชฟเชเซเชคเชคเชพ" เชจเชเซเชเซ เชเชฐเซ เชเซ. เชเซเชจเซ เชชเชพเชธเซเชฅเซ เช เชจเซ เชเซเชจเซ, เชเซเชฏเชพเชฐเซ, เชธเชเชฆเซเชถ เชฌเซเชเชพ เชธเชพเชฅเซ เชฌเชฆเชฒเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเชคเซ เชเซ เชเซเชฎ เช เชจเซ เชฎเซเชเชฒเชตเชพเชจเซ เชธเชฎเชฏ เชฏเซเชเซเชฏ เชฐเซเชคเซ เชธเซเชเชตเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเชคเซ เชเซ เชเซเชฎ. เชฌเซเชฒเซเชเชเซเชจเชจเซ เช เชเช เชเซเชฌ เช เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ เชซเชพเชฏเชฆเซ เชเซ - เชคเซเชฏเชพเช เชเซเช เชเซเชจเซเชฆเซเชฐเซเชฏ เชฎเชพเชณเชเซเช เชจเชฅเซ เชเซ เชเชเชพเชธเชฃเซ เชฎเชพเชเซ เชเชตเชพเชฌเชฆเชพเชฐ เชนเซเชฏ, เช เชจเซ เชธเชเชฆเซเชถเชพเชเชจเซ เชเซเชฐเชฎ เช เชจเซ เชคเซเชฎเชจเซ เชธเชพเชฎเชเซเชฐเซ เชฌเชจเชพเชตเชเซ เชเชฐเซ เชถเชเชพเชคเซ เชจเชฅเซ.
เชชเซเชฐเชฅเชฎ, เชเช เชจเซเชก เชเซเชเชธเชพเช เชคเชชเชพเชธเซ เชเซ, เช เชจเซ เชชเชเซ เชคเซเชจเซ เช เชจเซเชฏเชจเซ เชฎเซเชเชฒเซ เชเซ - เชเซ เชฌเชนเซเชฎเชคเซ เชเชนเซ เชเซ เชเซ เชฌเชงเซเช เชเซเชฐเชฎเชฎเชพเช เชเซ, เชคเซ เชตเซเชฏเชตเชนเชพเชฐ เชธเชพเชเชเชณเชจเชพ เชเชเชฒเชพ เชฌเซเชฒเซเชเชฎเชพเช เชถเชพเชฎเซเชฒ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ - เช เชธเชฐเซเชตเชธเชเชฎเชคเชฟ เชเซ.
เชจเซเชก เชเซเชกเชจเซ เชญเชพเช เชเซ เชคเชชเชพเชธ เชฎเชพเชเซ เชเชตเชพเชฌเชฆเชพเชฐ เชเซ เชคเซ GitHub เชชเชฐ เชเซเช เชถเชเชพเชฏ เชเซ -
เชฌเซเชฒเซเชเชฎเชพเช เชธเชเชฆเซเชถ เชธเชพเชฅเซเชจเชพ เชตเซเชฏเชตเชนเชพเชฐ เชธเชนเชฟเชค
เชเซ เชธเชฐเซเชตเชธเชเชฎเชคเชฟ เชชเชนเซเชเชเซ เชเชพเชฏ, เชคเซ เช เชฎเชพเชฐเชพ เชธเชเชฆเซเชถ เชธเชพเชฅเซเชจเซ เชตเซเชฏเชตเชนเชพเชฐ เช เชจเซเชฏ เชฎเชพเชจเซเชฏ เชตเซเชฏเชตเชนเชพเชฐเซ เชธเชพเชฅเซ เชเชเชพเชฎเซ เชฌเซเชฒเซเชเชฎเชพเช เชธเชพเชฎเซเชฒ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ.
เชฌเซเชฒเซเชเซเชธเชฎเชพเช เชเชกเช เชเซเชฐเชฎ เชนเซเชฏ เชเซ, เช เชจเซ เชฆเชฐเซเช เช เชจเซเชเชพเชฎเซ เชฌเซเชฒเซเช เช เชเชพเชเชจเชพ เชฌเซเชฒเซเชเชจเชพ เชนเซเชถเชจเชพ เชเชงเชพเชฐเซ เชฐเชเชพเชฏ เชเซ.
เชฎเซเชฆเซเชฆเซ เช เชเซ เชเซ เช
เชฎเชพเชฐเซ เชธเชเชฆเซเชถ เชชเชฃ เช เชเซเชฐเชฎเชฎเชพเช เชธเชฎเชพเชตเชฟเชทเซเช เชเซ เช
เชจเซ เชคเซเชจเซ "เชชเซเชจเชเชตเซเชฏเชตเชธเซเชฅเชฟเชค" เชเชฐเซ เชถเชเชพเชคเซ เชจเชฅเซ. เชเซ เชเชฃเชพ เชธเชเชฆเซเชถเชพเช เชฌเซเชฒเซเชเชฎเชพเช เชเชตเซ เชเซ, เชคเซ เชคเซเชฎเชจเซ เชเชฐเซเชกเชฐ เชฆเซเชตเชพเชฐเชพ เชจเชเซเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ timestamp
เชธเชเชฆเซเชถเชพเช
เชธเชเชฆเซเชถเชพเช เชตเชพเชเชเซ เชฐเชนเซเชฏเชพ เชเซเช
เชฎเซเชธเซเชจเซเชเชฐ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฌเซเชฒเซเชเชเซเชจเชฎเชพเชเชฅเซ เชตเซเชฏเชตเชนเชพเชฐเซ เชชเซเชจเชเชชเซเชฐเชพเชชเซเชค เชเชฐเซ เชเซ เชเซ เชชเซเชฐเชพเชชเซเชคเชเชฐเซเชคเชพเชจเซ เชฎเซเชเชฒเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เช เชฎเชพเชเซ เช
เชฎเซ เชเช เช
เชเชคเชฟเชฎ เชฌเชฟเชเชฆเซ เชฌเชจเชพเชตเซเชฏเซเช 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 เชธเซเชเชจเซเชกเชฎเชพเช เช เชฐเซเชคเซ เชตเชฟเชคเชฐเชฟเชค เชฅเชพเชฏ เชเซ - เช เชคเซ เชธเชฎเชฏ เชเซ เชเซเชฏเชพเชฐเซ เชจเชตเซ เชจเซเชเชตเชฐเซเช เชฌเซเชฒเซเช เชฆเซเชเชพเชฏ เชเซ - เช เชฎเซ เชเซเชฒเชพเชฏเชเช-เชเซ-เชจเซเชก เช เชจเซ เชจเซเชก-เชเซ-เชจเซเชก เชธเซเชเซเช เชเชจเซเชเซเชถเชจ เชธเชพเชฅเซ เชเชตเซเชฏเชพ เชเซเช. เชเซเชฏเชพเชฐเซ เชจเซเชก เชจเชตเซ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชฎเซเชณเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชคเซ เชคเซเชจเซ เชฎเชพเชจเซเชฏเชคเชพ เชคเชชเชพเชธเซ เชเซ เช เชจเซ เชคเซเชจเซ เช เชจเซเชฏ เชจเซเชกเซเชธ เชชเชฐ เชซเซเชฐเชตเชฐเซเชก เชเชฐเซ เชเซ. เชธเชฐเซเชตเชธเชเชฎเชคเชฟ เชฅเชพเชฏ เช เชจเซ เชฌเซเชฒเซเชเชฎเชพเช เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชคเซ เชชเชนเซเชฒเชพเช เช เชฎเซเชธเซเชจเซเชเชฐ เชเซเชฒเชพเชฏเชจเซเชเซเชธ เชฎเชพเชเซ เชตเซเชฏเชตเชนเชพเชฐ เชเชชเชฒเชฌเซเชง เชเซ. เช เชฐเซเชคเซ เช เชฎเซ เชจเชฟเชฏเชฎเชฟเชค เชเชจเซเชธเซเชเชจเซเช เชฎเซเชธเซเชจเซเชเชฐเชจเซ เชเซเชฎ เชคเชฐเชค เช เชธเชเชฆเซเชถเชพ เชชเชนเซเชเชเชพเชกเซเชถเซเช.
เชเชกเซเชฐเซเชธ เชฌเซเช เชธเซเชเซเชฐ เชเชฐเชตเชพ เชฎเชพเชเซ, เช
เชฎเซ KVS เชฌเชจเชพเชตเซเชฏเซเช - เชเซ-เชตเซเชฒเซเชฏเซ เชธเซเชเซเชฐเซเช - เช เช
เชจเซเชฏ เชชเซเชฐเชเชพเชฐเชจเซ เชตเซเชฏเชตเชนเชพเชฐ เชเซ เชเซเชฎเชพเช asset
เชคเซ เชเชจเชเซเชฐเชฟเชชเซเชเซเชก NaCl-เชฌเซเชเซเชธ เชจเชฅเซ, เชชเชฐเชเชคเซ
เชซเชพเชเชฒ/เชเชฎเซเช เชเซเชฐเชพเชจเซเชธเชซเชฐ เช เชจเซ เชเซเชฐเซเชช เชเซเชเซเชธ เชฎเชพเชเซ เชนเชเซ เชชเชฃ เชเชฃเซเช เชเชพเชฎ เชเชฐเซเชฐเซ เชเซ. เช เชฒเชฌเชคเซเชค, เชญเซเชฒ-เช เชจเซ-เชญเซเชฒเชจเชพ เชซเซเชฐเซเชฎเซเชเชฎเชพเช เชเชจเซ เชเชกเชชเชฅเซ "เชธเซเชเซเชฐเซ เช เชช" เชเชฐเซ เชถเชเชพเชฏ เชเซ, เชชเชฐเชเชคเซ เช เชฎเซ เชเซเชชเชจเซเชฏเชคเชพเชจเชพ เชธเชฎเชพเชจ เชธเซเชคเชฐเชจเซ เชเชพเชณเชตเซ เชฐเชพเชเชตเชพ เชฎเชพเชเชเซเช เชเซเช.
เชนเชพ, เชนเชเซ เชเชพเชฎ เชเชฐเชตเชพเชจเซเช เชฌเชพเชเซ เชเซ - เชเชฆเชฐเซเชถ เชฐเซเชคเซ, เชตเชพเชธเซเชคเชตเชฟเช เชเซเชชเชจเซเชฏเชคเชพ เชงเชพเชฐเซ เชเซ เชเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเช เชธเชพเชฐเซเชตเชเชจเชฟเช เชจเซเชเชตเชฐเซเช เชจเซเชกเซเชธ เชธเชพเชฅเซ เชเชจเซเชเซเช เชฅเชถเซ เชจเชนเซเช, เชชเชฐเชเชคเซ เชคเซเชฎเชจเชพ เชชเซเชคเชพเชจเชพ เชเชญเชพ เชเชฐเชถเซ. เชคเชฎเชพเชฐเชพ เชฎเชคเซ เชเซเชเชฒเชพ เชเชเชพ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเช เช เชเชฐเซ เชเซ? เชคเซ เชธเชพเชเซเช เชเซ, 0. เช เชฎเซ เชฎเซเชธเซเชจเซเชเชฐเชจเชพ เชเซเชฐ เชธเชเชธเซเชเชฐเชฃ เชธเชพเชฅเซ เช เชธเชฎเชธเซเชฏเชพเชจเซ เชเชเชถเชฟเช เชฐเซเชคเซ เชนเชฒ เชเชฐเชตเชพเชฎเชพเช เชธเชเซเชทเชฎ เชนเชคเชพ.
เช
เชฎเซ เชธเชพเชฌเชฟเชค เชเชฐเซเชฏเซเช เชเซ เชเซ เชฌเซเชฒเซเชเชเซเชจ เชชเชฐ เชฎเซเชธเซเชจเซเชเชฐ เช
เชธเซเชคเชฟเชคเซเชตเชฎเชพเช เชนเซเช เชถเชเซ เชเซ. เช
เชเชพเช, 2012 เชฎเชพเช เชฎเชพเชคเซเชฐ เชเช เช เชชเซเชฐเชฏเชพเชธ เชนเชคเซ -
เช
เชจเซ เชธเชเชถเชฏ เช เชนเชเซเชเชคเชจเซ เชเชพเชฐเชฃเซ เชเซ เชเซ เชฌเซเชฒเซเชเชเซเชจ เชชเชฐเชจเชพ เชธเชเชฆเซเชถเชตเชพเชนเชเซ เชคเซเชฎเชจเชพ เชธเชฎเชฏ เชเชฐเชคเชพเช เชเชเชณ เชเซ - เชฒเซเชเซ เชคเซเชฎเชจเชพ เชเชเชพเชเชจเซเชเชจเซ เชเชตเชพเชฌเชฆเชพเชฐเซ เชฒเซเชตเชพ เชคเซเชฏเชพเชฐ เชจเชฅเซ, เชตเซเชฏเชเซเชคเชฟเชเชค เชฎเชพเชนเชฟเชคเซเชจเซ เชฎเชพเชฒเชฟเชเซ เชนเชเซ เชธเซเชงเซ เชเช เชตเชฒเชฃ เชจเชฅเซ, เช
เชจเซ เชเซเชเชจเซเชฒเซเชเซ เชฌเซเชฒเซเชเชเซเชจ เชชเชฐ เชเชเชเซ เชเชกเชชเชจเซ เชฎเชเชเซเชฐเซ เชเชชเชคเซ เชจเชฅเซ. เช
เชฎเชพเชฐเชพ เชชเซเชฐเซเชเซเชเซเชเชจเชพ เชตเชงเซ เชคเชเชจเซเชเซ เชเชจเชพเชฒเซเช เชเชเชณ เชฆเซเชเชพเชถเซ. เชคเชฎเซ เชเซเชถเซ.
เชธเซเชฐเซเชธ: www.habr.com