ืืื ืื ืึธื ืืืื ืคืื 2017, ืืืจ ืื ืืขืืืืื ืฆื ืฉืึทืคึฟื ืึท ืฉืืื ืืืืฃ ืื ืืืึธืงืืฉืืื [ื ืึธืืขื ืืื ืืื ืง ืืขื ืขื ืืื ืืขื ืคึผืจืึธืคืื] ืืืจื ืืืกืงืืืืจื ืื ืึทืืืืึทื ืืืืืฉืื ืืืืขืจ ืงืืึทืกืืฉ P2P ืฉืืืืื.
ืืืจืืืขืืื ืืขื 2.5
ืืึธืจ, ืืื ืืืจ ืืขื ืขื ืืืืืืช ืฆื ืืึทืฉืืขืืืงื ืืื ืืืขืจ ืืึทืืจืืฃ: ืืขืกืื ืืืฉืขืจ ืึทืคึผืืึทืงืืืฉืึทื ื ืืขื ืขื ืืืฆื ืื ืืืฆื ืคึฟืึทืจ ืืึธืก, ืืืขื ืคึผืืืึท, ืืืื ืืึธืื, ืื ื / ืืื ืืงืก, ืืขืง ืึทืก ืืื ืึทื ืืจืืื.
ืืืึทื ื ืืืจ ืืืขืื ืืึธืื ืืืจ ืืื ืื ืืืึทืงืืืื ืืขืกืื ืืืฉืขืจ ืึทืจืืขื ืืื ืืื ืงืืืขื ื ืึทืคึผืืึทืงืืืฉืึทื ื ืงืขื ืขื ืึทืจืืขืื ืืื ืืืื ืึทืคึผื.
ืืืจ ืืขืืืืื ืื ืืืึธืงืืฉืืื ืฆื ืกืึธืืืืข ืื ืืืืขืจืืืื ืืื ืคึผืจืืืืึทืืงืืื ืืฉืื ืคืื ืงืืึทืกืืฉ P2P ืฉืืืืื:
- ืืืื ืืื ืฆื ืฉืึทืคึฟื ืึท ืืฉืืื - ืงืืื ืคืึธื ืขืก ืึธืืขืจ ืืืืืื, ืงืืื ืึทืงืกืขืก ืฆื ืึทืืจืขืก ืืืืขืจ ืึธืืขืจ ืืขืึธืืึธืงืึทืืืึธื ืก.
- ืื ืื ืืขืจืืึทืงืืึทืืขืจื ืงืืื ืืึธื ืคืึทืจืืืืื ืืืจืขืงื ืงืึทื ืขืงืฉืึทื ื; ืึทืืข ืงืึธืืื ืืงืึทืฆืืข ื ืขืื ืึธืจื ืืืจื ืึท ืคืื ืื ืืขืจืืขืืืืื ืกืืกืืขื ืคืื ื ืึธืืื. ืืืืขืจื 'IP ืึทืืจืขืกืขืก ืืขื ืขื ื ืืฉื ืฆืืืจืืืืขื ืฆื ืืขืืขืจ ืื ืืขืจืขืจ.
- ืึทืืข ืึทืจืืืงืืขื ืืขื ืขื ืื ืงืจืืคึผืืื ืกืืฃ-ืฆื-ืกืืฃ ืืืกืืืื 25519ืงืกืกืึทืืกืึท 20 ืคึผืึธืื1305. ืขืก ืืืื ื ืึทื ืืึธืก ืืืขื ื ืืฉื ืืืขืจืจืึทืฉื ืืืขืจ ืขืก ืื, ืึธืืขืจ ืืื ืืืขืจ ืืงืืจ ืงืึธื ืืื ืึธืคื.
- MITM ืืึทืคืึทืื ืืื ืืงืกืงืืืืื - ืืขืืขืจ ืึธื ืืึธื ืืื ืึท ืืจืึทื ืกืึทืงืืืึธื ืืื ืืื ืืขืืชืืขื ืืืจื Ed25519 EdDSA.
- ืืขืจ ืึธื ืืึธื ืขื ืืก ืืื ืืืื ืืืืืขื ืข ืืืึธืง. ืงืึธื ืกืืกืืขื ืกื ืืื
timestamp
ืืืจ ืงืขื ืขื ื ืืฉื ืคืึทืจืจืืืื ืื ืืืึทืงืก, ืืื ืืขืจืืืขืจ ืื ืกืืจ ืคืื ืื ืึทืจืืืงืืขื. - "ืืื ืืื ื ืื ืืึธืื ืึทื" ืืืขื ื ืืฉื ืึทืจืืขืื ืืื ืึทืจืืืงืืขื ืืืืฃ ืื ืืืึธืงืืฉืืื.
- ืขืก ืืื ืงืืื ืืืืคื ืกืืจืืงืืืจ ืืืึธืก ืืื ืืฉืขืงืก ืืืืฃ ืื "ืึธืืขื ืืืกืืื" ืคืื ืึท ืึธื ืืึธื. ืืึธืก ืืื ืืขืืื ืืืจื ืึท ืคืื ืื ืืขืจืืขืืืืื ืกืืกืืขื ืคืื ื ืึธืืื ืืืืืจื ืืืืฃ ืงืึธื ืกืขื ืกืืก, ืืื ืขืก ืืื ืึธืื ื ืืืจื ืื ื ืืฆืขืจืก.
- ืืืคึผืึธืกืืืืืืื ืคืื ืฆืขื ืืืจ - ืึทืงืึทืื ืฅ ืงืขื ืขื ื ืื ืืืื ืืคืืขืฉืืขืื ืืื ืึทืจืืืงืืขื ืงืขื ืขื ื ืื ืืืื ืืืืกืืขืืขืงื.
- Blockchain 2FA ืืื ืึทื ืึธืืืขืจื ืึทืืืื ืฆื ืื ืืขืืืฉ 2FA ืืืจื SMS,
ืจืืื ื ืึท ืคึผืืึทืฅ ืคืื ืืขืืื ื. - ืื ืคืืืืงืืื ืฆื ืืึทืงืืืขื ืึทืืข ืืืื ืฉืืืขืกื ืคึฟืื ืงืืื ืืืื ืืื ืงืืื ืฆืืื ืืืื ืึทื ืืืจ ืืึธื ื ืื ืืึธืื ืฆื ืงืจืึธื ืฉืืืขืกื ืืึธืืงืึทืื.
- ืืึทืฉืืขืืืงืื ื ืคืื ืึธื ืืึธื ืขืงืกืคึผืจืขืก. ื ืื ืฆื ืื ืืึทื ืืฆืขืจ 'ืก ืืืื, ืึธืืขืจ ืฆื ืื ื ืขืฅ. ืืกืขื ืฉืึทืื, ืืึธืก ืืื ืืึทืฉืืขืืืงืื ื ืคืื ืื ืืึทืงืืืขืจ ืก ืคืืืืงืืื ืฆื ืืืืขื ืขื ืืืื ืึธื ืืึธื. ืืึธืก ืืื ืึท ื ืืฆืืง ืฉืืจืื ืคึฟืึทืจ ืฉืืงื ืงืจืืืืฉ ื ืึธืืืึทืคืึทืงืืืฉืึทื ื.
ืืืึธืงืืฉืืื ืืขื ืขืคืืฅ ืืืื ืึทืจืืึทื ื ืขืืขื ื ืึธืขื ื ืื ืืึทืืจืืืฉืึทื ืืื ืื ืงืจืืคึผืืึธืงืืจืจืขื ืกื ืขืืืขืจืขืื, ืืึธืืขืงืึธืื, ืืืกืง, ืืึทืฉ, ืืืืงืึธืื (ืืึธืก ืืื ื ืึธื ืืื ืคึผืจืึธืืจืขืก) ืืื ืื ืคืืืืงืืื ืฆื ืฉืืงื ืืึธืงืขื ืก ืืื ืืฉืึทืฅ. ืืืจ ืืคืืื ืืขืืืื ืึท ืืขืืืื-ืืื ืงืจืืคึผืืึธ ืืงืกืืฉืืื ืืืฉืขืจ.
ืืื ืืขืืึธืื - ืืื ืขืก ืึทืืข ืึทืจืืขื.
ื ืึธื ืืึธื ืืื ืึท ืืจืึทื ืกืึทืงืืืึธื
ืึทืืขืืขื ืืื ืฉืืื ืฆืืืขืืืืื ื ืฆื ืืขื ืคืึทืงื ืึทื ืืจืึทื ืืึทืงืฉืึทื ื ืืื ืื ืืืึธืงืืฉืืื ืึทืจืืืขืจืคืืจื ืืึธืงืขื ืก (ืงืึธืื ืก) ืคืื ืืืื ืืึทื ืืฆืขืจ ืฆื ืื ืืขืจื. ืืื ืืืืงืึธืื. ืืืจ ืืืฉืืคื ืึท ืกืคึผืขืฆืืขื ืืืคึผ ืคืื ืืจืึทื ืกืึทืงืืืึธื ืคึฟืึทืจ ืืจืึทื ืกืืืืื ื ืึทืจืืืงืืขื.
ืฆื ืฉืืงื ืึท ืึธื ืืึธื ืืื ืึท ืฉืืื ืืืืฃ ืื ืืืึทืงืืืืืืึทื, ืืืจ ืืึทืจืคึฟื ืฆื ืืืื ืืืจื ืขืืืขืืข ืกืืขืคึผืก:
- ืขื ืงืจืืคึผื ืึธื ืืึธื ืืขืงืกื
- ืฉืืขืื ืกืืืคืขืจ ืืขืงืกื ืืื ืึท ืืจืึทื ืกืึทืงืืืึธื
- ืฆืืืื ืื ืืจืึทื ืกืึทืงืืืึธื
- ืฉืืงื ืึท ืืจืึทื ืกืึทืงืืืึธื ืฆื ืงืืื ื ืขืฅ ื ืึธืืข
- ื ืคืื ืื ืืขืจืืขืืืืื ืกืืกืืขื ืคืื ื ืึธืืื ืืืืขืจืืึทื ื ืื "ืึธืืขื ืืืกืืื" ืคืื ืึท ืึธื ืืึธื
- ืืืื ืึทืืฅ ืืื ืืื, ืื ืืจืึทื ืกืึทืงืืืึธื ืืื ืืขื ืึธื ืืึธื ืืื ืึทืจืืึทื ืืขืจืขืื ื ืืื ืืขืจ ืืืืึทืืขืจ ืืืึธืง
- ืืขืจ ืืึทืงืืืขืจ ืจืืืจืืืื ืื ืึธื ืืึธื ืืจืึทื ืกืึทืงืืืึธื ืืื ืืขืงืจืืคึผื
ืกืืขืคึผืก 1-3 ืืื 7 ืืขื ืขื ืืืจืืืขืงืึธืื ืืึธืืงืึทืื ืืืืฃ ืืขื ืงืืืขื ื, ืืื ืกืืขืคึผืก 5-6 ืืขื ืขื ืืืจืืืขืงืึธืื ืืืืฃ ืื ืืื ืืช.
ืึธื ืืึธื ืขื ืงืจืืคึผืฉืึทื
ืืขืจ ืึธื ืืึธื ืืื ืื ืงืจืืคึผืืื ืืื ืื ืกืขื ืืขืจ ืก ืคึผืจืืืืึทื ืฉืืืกื ืืื ืื ืืึทืงืืืขืจ ืก ืฆืืืืจ ืฉืืืกื. ืืืจ ืืืขืื ื ืขืืขื ืื ืฆืืืืจ ืฉืืืกื ืคืื ืื ื ืขืฅ, ืึธืืขืจ ืคึฟืึทืจ ืืขื, ืืขืจ ืืึทืงืืืขืจ ืก ืืฉืืื ืืืื ืืืื ืื ืืืืึทืืืืื, ืืึธืก ืืื, ืืึธืื ืืืึท ืืื ืืกืืขืจ ืืืื ืืจืึทื ืกืึทืงืืืึธื. ืืืจ ืงืขื ื ื ืืฆื ืึท REST ืืขืื GET /api/accounts/getPublicKey?address={ADAMANT address}
, ืืื ืืืขื ืืึธืืืื ื ืืฉืึทืฅ, ืื ืฆืืืืจ ืฉืืืกืืขื ืคืื ืื ืื ืืขืจืืึทืงืืึทืืขืจื ืืืขื ืฉืืื ืืืื ืื ืืืฆื.
ืืขืจ ืฉืืื ืขื ืงืจืืคึผื ืึทืจืืืงืืขื ืืื ืื curve25519xsalsa20poly1305 ืึทืืืขืจืืืึทื (
ืืึธ ืก ืึท ืืืึทืฉืคึผืื ืืื ืืืฉืึทืืืึทืกืงืจืืคึผื:
/**
* 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
, ืืื ืื ืืจืึทื ืกืึทืงืืืึธื ืฉืืึทื ืืื ืืืื ืคืื ืื 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'))
}
ืฉืืงื ืึท ืืจืึทื ืกืึทืงืืืึธื ืืื ืึท ืึธื ืืึธื ืฆื ืึท ื ืขืฅ ื ืึธืืข
ืืื ื ืื ื ืขืฅ ืืื ืืืกืขื ืืจืึทืืืืื, ืงืืื ืคืื ืื ื ืึธืืื ืืื ืึทื ืึธืคึฟื ืึทืคึผื ืืืขื ืืึธื. ืืึทืื ืึท POST ืืขืื ืฆื ืื ืขื ืืคึผืืื ื api/transactions
:
curl 'api/transactions' -X POST
-d 'TX_DATA'
ืืื ืขื ืืคืขืจ ืืืจ ืืืขืื ืืึทืงืืืขื ืึท ืืจืึทื ืกืึทืงืืืึธื ืฉืืึทื ืคืื ืืขื ืืืคึผ
{
"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
ืขืก ืืื ื ืืฉื ืื ืงืจืืคึผืืื ื ืึทืงื ืงืขืกืื, ืึธืืขืจ
ืืขืงืข / ืืืื ืืจืึทื ืกืคืขืจืก ืืื ืืจืืคึผืข ืืฉืึทืฅ ื ืึธื ืืึทืจืคื ืึท ืคึผืืึทืฅ ืคืื ืึทืจืืขื. ืคืื ืงืืจืก, ืืื ืื ืืืึธื ืืขืจ-ืืื-ืืืึธื ืืขืจ ืคึฟืึธืจืืึทื ืืึธืก ืงืขื ืขื ืืืื "ืกืงืจืืื ืึทืจืืืฃ" ืืขืฉืืืื ื, ืึธืืขืจ ืืืจ ืืืืื ืฆื ืืึทืืื ืื ืืขืืืข ืืืจืื ืคืื ืคึผืจืืืืึทืืงืืื.
ืืึธ, ืขืก ืืื ื ืึธื ืึทืจืืขื ืฆื ืืึธื - ืืืืืื, ืคืึทืงืืืฉ ืคึผืจืืืืึทืืงืืื ืึทืกืืื ืึทื ืืืืขืจื ืืืขืื ื ืืฉื ืคืึทืจืืื ืื ืฆื ืฆืืืืจ ื ืขืฅ ื ืึธืืื, ืึธืืขืจ ืืืขื ืืึทืคึผื ืืืืขืจ ืืืืืขื ืข. ืืืึธืก ืคึผืจืึธืฆืขื ื ืคืื ืืืืขืจื ืืึธื ืืืจ ืืจืึทืืื ืืึธืก? ืึทื ืก ืจืขืื, 0. ืืืจ ืืขื ืขื ืืืืืืช ืฆื ืืืื ืกืึธืืืืข ืืขื ืึทืจืืืกืืขืื ืืื ืื Tor ืืืขืจืกืืข ืคืื โโืื ืฉืืื.
ืืืจ ืืึธืื ืคึผืจืึธืืืขื ืึทื ืึท ืฉืืื ืืืืฃ ืื ืืืึธืงืืฉืืื ืงืขื ืขื ืขืงืกืืกืืืจื. ืืื ืึทืืขืจ, ืขืก ืืื ืืขืืืขื ืืืืื ืืืื ืคึผืจืืืื ืืื 2012 -
ืืื ืกืงืขืคึผืืืกืืืึทื ืืื ืจืขืื ืฆื ืืขื ืคืึทืงื ืึทื ืฉืืืืื ืืืืฃ ืื ืืืึทืงืืืืืืึทื ืืขื ืขื ืคืึธืจืืืก ืคืื ืืืืขืจ ืฆืืื - ืืขื ืืฉื ืืขื ืขื ื ืืฉื ืืจืืื ืฆื ื ืขืืขื ืคึฟืึทืจืึทื ืืืืึธืจืืืขืืงืืื ืคึฟืึทืจ ืืืืขืจ ืืฉืืื, ืึธืื ืื ื ืคึผืขืจืืขื ืืขื ืืื ืคึฟืึธืจืืึทืฆืืข ืืื ื ืืฉื ื ืึธื ืึท ืืึทื ื, ืืื ืืขืื ืึธืืึธืืืข ืงืขื ื ืืฉื ืืึธืื ืืืื ืกืคึผืืื ืืืืฃ ืื ืืืึทืงืืืืืืึทื. ืืขืจ ืืขืงื ืึทืืึทืืืฉืืงืึทื ืึทื ืึทืืึธืืืขืก ืคืื ืืื ืืืขืจ ืคึผืจืืืขืงื ืืืขื ืืขืจืฉืืึทื ืขื ืืืืึทืืขืจ. ืื ืืืขืกื ืืขืื.
ืืงืืจ: www.habr.com