Getan til að fá öll samtölin þín úr hvaða tæki sem er hvenær sem er þýðir að þú þarft alls ekki að geyma samtöl á staðnum.
Staðfesting á afhendingu skilaboða. Ekki á tæki notandans, heldur til netsins. Í meginatriðum er þetta staðfesting á getu viðtakandans til að lesa skilaboðin þín. Þetta er gagnlegur eiginleiki til að senda mikilvægar tilkynningar.
Kostir Blockchain fela einnig í sér nána samþættingu við dulritunargjaldmiðlana Ethereum, Dogecoin, Lisk, Dash, Bitcoin (þessi er enn í vinnslu) og getu til að senda tákn í spjalli. Við gerðum meira að segja innbyggðan dulritunarskipti.
Og svo - hvernig allt virkar.
Skilaboð eru viðskipti
Allir eru nú þegar vanir því að viðskipti í blockchain flytja tákn (mynt) frá einum notanda til annars. Eins og Bitcoin. Við bjuggum til sérstaka tegund viðskipta til að senda skilaboð.
Til að senda skilaboð í boðbera á blockchain þarftu að fara í gegnum nokkur skref:
Ef allt er í lagi eru viðskiptin með skilaboðunum innifalin í næsta blokk
Viðtakandinn sækir skilaboðafærsluna og afkóðar
Skref 1–3 og 7 eru framkvæmd á staðnum á viðskiptavininum og skref 5–6 eru framkvæmd á vélunum.
Skilaboða dulkóðun
Skilaboðin eru dulkóðuð með einkalykli sendanda og opinberum lykli viðtakanda. Við munum taka opinbera lykilinn af netinu, en til þess verður að frumstilla reikning viðtakandans, það er að hafa að minnsta kosti eina færslu. Þú getur notað REST beiðni GET /api/accounts/getPublicKey?address={ADAMANT address}, og þegar spjall er hlaðið verða opinberir lyklar viðmælenda nú þegar tiltækir.
Sendiboðinn dulkóðar skilaboð með því að nota curve25519xsalsa20poly1305 reikniritið (NaCl kassi). Þar sem reikningurinn inniheldur Ed25519 lykla, til að mynda kassa, verður fyrst að breyta lyklunum í Curve25519 Diffie-Hellman.
Fyrir skilaboðafærslu er það mikilvægasta asset - þú þarft að setja skilaboð í hlutinn chat með uppbyggingu:
message - vistaðu dulkóðuðu skilaboðin
own_message - ekkert
type — gerð skilaboða
Skilaboðum er einnig skipt í tegundir. Í meginatriðum, færibreytan type segir þér hvernig þú átt að skilja message. Þú getur sent bara texta, eða þú getur sent hlut með áhugaverðum hlutum inni - til dæmis, þetta er hvernig boðberinn gerir cryptocurrency millifærslur í spjalli.
Til að tryggja að allir séu öruggir um áreiðanleika sendanda og viðtakanda, sendingartíma og innihald skilaboðanna eru viðskiptin undirrituð. Stafræn undirskrift gerir þér kleift að sannreyna áreiðanleika viðskipta með því að nota opinberan lykil - ekki þarf einkalykill til þess.
En undirskriftin sjálf er framkvæmd með einkalyklinum:
Skýringarmyndin sýnir að við hashum fyrst viðskiptin með SHA-256 og skrifum síðan undir Ed25519 EdDSA og fáðu undirskrift signature, og færslukennið er hluti af SHA-256 kjötkássa.
Dæmi um útfærslu:
1 — Myndaðu gagnablokk, þar á meðal skilaboð
/**
* 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)
}
Dreift kerfi hnúta, byggt á samstöðu, ákvarðar „áreiðanleika“ viðskiptaskilaboðanna. Frá hverjum og til hvers, hvenær, hvort skeytinu hafi verið skipt út fyrir annað og hvort sendingartími hafi verið rétt tilgreindur. Þetta er mjög mikilvægur kostur blockchain - það er engin miðlæg uppbygging sem ber ábyrgð á sannprófun og ekki er hægt að falsa röð skilaboða og innihald þeirra.
Fyrst athugar einn hnútur nákvæmnina og sendir hana síðan til annarra - ef meirihlutinn segir að allt sé í lagi, þá verða viðskiptin innifalin í næsta blokk keðjunnar - þetta er samstaða.
Hægt er að skoða þann hluta hnútkóðans sem ber ábyrgð á athugunum á GitHub - validator.js и staðfesta.js. Já, hnúturinn keyrir á Node.js.
Þar á meðal færslu með skilaboðum í blokk
Ef samstaða næst verða viðskiptin með skilaboðunum okkar innifalin í næsta blokk ásamt öðrum gildum viðskiptum.
Blokkir hafa stranga röð og hver síðari blokk er mynduð út frá kjötkássa fyrri blokka.
Málið er að skilaboðin okkar eru líka innifalin í þessari röð og ekki er hægt að „endurraða“. Ef nokkur skilaboð falla í blokk ræðst röð þeirra af timestamp skilaboð.
Að lesa skilaboð
Messenger forritið sækir viðskipti úr blockchain sem eru send til viðtakanda. Fyrir þetta gerðum við endapunkt api/chatrooms.
Öll viðskipti eru í boði fyrir alla - þú getur fengið dulkóðuð skilaboð. En aðeins viðtakandinn getur afkóðað með því að nota einkalykil sinn og opinberan lykil sendanda:
Þar sem skilaboð eru afhent á þennan hátt á um það bil 5 sekúndum - þetta er tíminn sem ný netblokk birtist - komum við upp með tengingu við biðlara til hnút og hnút til hnút. Þegar hnútur fær nýja færslu athugar hann gildi hennar og sendir hana áfram til annarra hnúta. Viðskiptin eru í boði fyrir viðskiptavinum boðbera jafnvel áður en samstaða verður og tekin inn í blokkina. Þannig munum við koma skilaboðum til skila samstundis, rétt eins og venjulegir skyndiboðarar.
Til að geyma heimilisfangaskrána gerðum við KVS - Key-Value Storage - þetta er önnur tegund viðskipta þar sem asset það er ekki NaCl-box sem er dulkóðuð, heldur NaCl-leynibox. Þannig geymir boðberinn önnur gögn.
Skráa-/myndaflutningar og hópspjall krefjast enn mikillar vinnu. Auðvitað er hægt að „skrúfa“ þetta fljótt í klúður og klúður sniði, en við viljum viðhalda sama stigi friðhelgi einkalífsins.
Já, það er enn verk að vinna - helst, raunverulegt næði gerir ráð fyrir að notendur muni ekki tengjast opinberum nethnútum, heldur hækka sína eigin. Hversu hátt hlutfall notenda heldurðu að geri þetta? Það er rétt, 0. Við gátum leyst þetta mál að hluta með Tor útgáfu boðberans.
Við höfum sannað að boðberi á blockchain getur verið til. Áður var aðeins ein tilraun árið 2012 - bitaskilaboð, sem mistókst vegna langs afhendingartíma skilaboða, álags á örgjörva og skorts á farsímaforritum.
Og efasemdir eru vegna þess að boðberar á blockchain eru á undan sinni samtíð - fólk er ekki tilbúið til að taka ábyrgð á reikningi sínum, að eiga persónulegar upplýsingar er ekki enn í þróun og tæknin leyfir ekki háhraða á blockchain. Fleiri tæknilegar hliðstæður verkefnisins okkar munu birtast næst. Þú munt sjá.