Kodi messenger yokhazikika imagwira ntchito bwanji pa blockchain?
Kumayambiriro kwa chaka cha 2017, tidayamba kupanga messenger pa blockchain [dzina ndi ulalo zili mumbiri] pokambirana zaubwino kuposa amithenga akale a P2P.
Zapita 2.5 chaka, ndipo tinatha kutsimikizira lingaliro lathu: mapulogalamu a messenger tsopano akupezeka pa iOS, Web PWA, Windows, GNU/Linux, Mac OS ndi Android.
Lero tikuwuzani momwe messenger blockchain imagwirira ntchito komanso momwe mapulogalamu a kasitomala angagwirire ntchito ndi API yake.
Tinkafuna kuti blockchain ithetse nkhani zachitetezo ndi zinsinsi za amithenga apamwamba a P2P:
Ma interlocutors samakhazikitsa kulumikizana kwachindunji; kulumikizana konse kumachitika kudzera munjira yogawidwa ya node. Ma adilesi a IP a ogwiritsa ntchito sapezeka kwa wina ndi mnzake.
Kuwukira kwa MITM sikuphatikizidwa - uthenga uliwonse ndizochitika ndipo wasainidwa ndi Ed25519 EdDSA.
Uthengawo umathera mu mdadada wake womwe. Kusasinthasintha ndi timestamp Simungathe kukonza midadada, choncho dongosolo la mauthenga.
"Sindinanene kuti" sizigwira ntchito ndi mauthenga pa blockchain.
Palibe dongosolo lapakati lomwe limayang'ana "zowona" za uthenga. Izi zimachitidwa ndi dongosolo logawidwa la node malinga ndi mgwirizano, ndipo ndi la ogwiritsa ntchito.
Kutsimikizira kutumiza uthenga. Osati ku chipangizo cha wosuta, koma pa intaneti. Kwenikweni, uku ndikutsimikizira kuti wolandirayo amatha kuwerenga uthenga wanu. Izi ndi zothandiza potumiza zidziwitso zovuta.
Ubwino wa blockchain umaphatikizanso kuphatikizika kwapafupi ndi ma cryptocurrencies Ethereum, Dogecoin, Lisk, Dash, Bitcoin (ichi chikuchitikabe) komanso kuthekera kotumiza zizindikiro pamacheza. Tidapanganso makina osinthira a crypto.
Ndiyeno - momwe zonse zimagwirira ntchito.
Uthenga ndi malonda
Aliyense adazolowera kale kuti zochitika mu blockchain kusamutsa tokeni (ndalama) kuchokera kwa wogwiritsa ntchito wina kupita kwa wina. Monga Bitcoin. Tinapanga mtundu wapadera wotumizirana mauthenga.
Kuti mutumize uthenga mwa messenger pa blockchain, muyenera kudutsa njira zingapo:
Lembani mawu a meseji
Ikani ciphertext muzochitika
Saina zomwe zachitika
Tumizani zochita ku node iliyonse ya netiweki
Dongosolo logawidwa la node limatsimikizira "zowona" za uthenga
Ngati zonse zili bwino, kugulitsa ndi uthenga kumaphatikizidwa mu block yotsatira
Wolandira amatenga uthengawo ndikuchotsa
Masitepe 1-3 ndi 7 amachitidwa kwanuko kwa kasitomala, ndipo masitepe 5-6 amachitidwa pa osunga.
Kubisa kwa uthenga
Uthengawu umabisidwa ndi kiyi yachinsinsi ya wotumiza komanso kiyi yapoyera ya wolandira. Tidzatenga makiyi a anthu pa intaneti, koma pa izi, akaunti ya wolandirayo iyenera kukhazikitsidwa, ndiko kuti, kuchitapo kanthu kamodzi. Mutha kugwiritsa ntchito pempho la REST GET /api/accounts/getPublicKey?address={ADAMANT address}, ndipo potsegula macheza, makiyi a anthu onse a interlocutors adzakhalapo kale.
Messenger amasunga mauthenga pogwiritsa ntchito algorithm ya curve25519xsalsa20poly1305 (Bokosi la NaCl). Popeza akauntiyo ili ndi makiyi a Ed25519, kuti mupange bokosi, makiyi ayenera kusinthidwa kukhala Curve25519 Diffie-Hellman.
Kuonetsetsa kuti aliyense ali ndi chidaliro mu zowona za wotumiza ndi wolandira, nthawi yotumiza ndi zomwe zili mu uthengawo, ntchitoyo imasainidwa. Siginecha ya digito imakupatsani mwayi wotsimikizira kutsimikizika kwa zomwe mwachita pogwiritsa ntchito kiyi yapagulu - kiyi yachinsinsi sikufunika pa izi.
Koma siginecha yokha imachitidwa pogwiritsa ntchito kiyi yachinsinsi:
Chithunzichi chikuwonetsa kuti timakhala tikuchita ndi SHA-256 ndikusayina Ed25519 EdDSA ndi kupeza signature signature, ndipo ID yogulitsira ndi gawo la SHA-256 hash.
Chitsanzo chokonzekera:
1 - Pangani chotchinga cha data, kuphatikiza uthenga
/**
* 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)
}
Dongosolo logawidwa la node, malinga ndi mgwirizano, limatsimikizira "zowona" za uthenga wamalonda. Kuchokera kwa ndani ndi kwa ndani, liti, ngati uthengawo unasinthidwa ndi wina, komanso ngati nthawi yotumiza inasonyezedwa molondola. Uwu ndi mwayi wofunikira kwambiri wa blockchain - palibe dongosolo lapakati lomwe limayang'anira kutsimikizira, ndipo kutsatizana kwa mauthenga ndi zomwe zili mkati mwake sizingakhale zabodza.
Choyamba, mfundo imodzi imayang'ana kulondola, ndiyeno imatumiza kwa ena - ngati ambiri akunena kuti zonse zili bwino, ntchitoyo idzaphatikizidwa mu chipika chotsatira cha unyolo - izi ndizogwirizana.
Gawo la nambala ya node lomwe limayang'anira macheke litha kuwonedwa pa GitHub - validator.js ΠΈ verify.js. Inde, node imayenda pa Node.js.
Kuphatikizirapo malonda ndi uthenga mu block
Ngati mgwirizano ufikiridwa, kugulitsa ndi uthenga wathu kudzaphatikizidwa mu block yotsatira pamodzi ndi zochitika zina zovomerezeka.
Mipikisano imakhala yotsatizana, ndipo chipika chilichonse chotsatira chimapangidwa potengera ma hashes a midadada yapita.
Mfundo ndi yakuti uthenga wathu ukuphatikizidwanso mu ndondomekoyi ndipo sungathe "kukonzedwanso". Ngati mauthenga angapo agwera mu chipika, dongosolo lawo lidzatsimikiziridwa ndi timestamp mauthenga.
Kuwerenga mauthenga
Ntchito ya messenger imatenganso zochitika kuchokera ku blockchain zomwe zimatumizidwa kwa wolandira. Kwa ichi tinapanga mapeto api/chatrooms.
Zochita zonse zimapezeka kwa aliyense - mutha kulandira mauthenga obisika. Koma wolandira yekha ndi amene angathe kumasulira pogwiritsa ntchito kiyi yake yachinsinsi ndi kiyi yapagulu ya wotumiza:
Popeza mauthenga amaperekedwa motere pafupifupi masekondi a 5 - ino ndi nthawi yomwe chipika chatsopano cha netiweki chikuwonekera - tabwera ndi kasitomala-to-node ndi node-to-node socket kulumikizana. Node ikalandira kugulitsa kwatsopano, imayang'ana kutsimikizika kwake ndikuitumiza kumalo ena. Kugulitsako kulipo kwa makasitomala a messenger ngakhale kusagwirizana kusanachitike ndikuphatikizidwa mu block. Mwanjira iyi tidzatumiza mauthenga nthawi yomweyo, monga ma meseji anthawi yomweyo.
Kuti tisunge buku la maadiresi, tidapanga KVS - Key-Value Storage - uwu ndi mtundu wina wamalonda omwe asset si bokosi la NaCl lomwe lalembedwa, koma NaCl-secretbox. Umu ndi momwe mesenjalayo amasungira deta ina.
Kusamutsa mafayilo/zithunzi ndi macheza amagulu amafunikirabe ntchito yambiri. Zachidziwikire, mumtundu wa blunder-and-blunder izi zitha "kufufuzidwa" mwachangu, koma tikufuna kusunga zinsinsi zomwezo.
Inde, pali ntchito yoti ichitidwe - kwenikweni, zinsinsi zenizeni zimaganiza kuti ogwiritsa ntchito sangalumikizane ndi ma node apagulu, koma azikweza okha. Kodi mukuganiza kuti ndi anthu otani omwe amachita izi? Ndiko kulondola, 0. Tinatha kuthetsa nkhaniyi pang'ono ndi mtundu wa Tor wa messenger.
Tatsimikizira kuti messenger pa blockchain akhoza kukhalapo. M'mbuyomu, panali kuyesa kumodzi kokha mu 2012 - bitmessage, zomwe zidalephera chifukwa cha nthawi yayitali yotumizira mauthenga, kuchuluka kwa CPU, komanso kusowa kwa mapulogalamu am'manja.
Ndipo kukayikira kuli chifukwa chakuti amithenga pa blockchain ali patsogolo pa nthawi yawo - anthu sali okonzeka kutenga udindo pa akaunti yawo, kukhala ndi chidziwitso chaumwini sikunali chizolowezi, ndipo teknoloji salola kuthamanga kwapamwamba pa blockchain. Zofananira zambiri zaukadaulo za polojekiti yathu ziwoneka pambuyo pake. Mudzawona.