Pehea e hana ai ka ʻelele decentralized ma ka blockchain?
I ka hoʻomaka ʻana o 2017, hoʻomaka mākou e hana i kahi ʻelele ma ka blockchain [inoa a me ka loulou ma ka ʻaoʻao] ma ke kūkākūkā ʻana i nā pono ma luna o nā ʻelele P2P maʻamau.
Ua hala 2.5 makahiki, a ua hiki iā mākou ke hōʻoia i ko mākou manaʻo: loaʻa nā noi ʻelele no iOS, PWA Web, Windows, GNU/Linux, Mac OS a me Android.
I kēia lā e haʻi mākou iā ʻoe pehea e hana ai ka ʻelele blockchain a pehea e hana ai nā noi mea kūʻai aku me kāna API.
Makemake mākou i ka blockchain e hoʻoponopono i nā pilikia palekana a me ka pilikino o nā ʻelele P2P maʻamau:
Hoʻokahi kaomi no ka hana ʻana i kahi moʻokāki - ʻaʻohe kelepona a i ʻole leka uila, ʻaʻohe komo i ka helu ʻana i nā puke a i ʻole geolocations.
ʻAʻole hoʻokumu ka poʻe interlocutors i nā pilina pololei; ke kamaʻilio nei nā mea āpau ma o kahi ʻōnaehana puʻupuʻu o nā nodes. ʻAʻole hiki ke loaʻa nā leka IP o nā mea hoʻohana i kekahi i kekahi.
Hoʻopili ʻia nā memo a pau End-to-End curve25519xsalsa20poly1305. Me he mea lā ʻaʻole ia e kāhāhā i kekahi, akā ua wehe ʻia kā mākou kumu kumu.
Hoʻokuʻu ʻia ka hoʻouka kaua MITM - ʻo kēlā me kēia memo he kālepa a kau inoa ʻia e Ed25519 EdDSA.
Pau ka memo i kona poloka pono'ī. ʻO ke kūlike a me ka timestamp ʻAʻole hiki iā ʻoe ke hoʻoponopono i nā poloka, a no laila ke ʻano o nā memo.
"ʻAʻole wau i ʻōlelo" ʻaʻole e hana me nā memo ma ka blockchain.
ʻAʻohe hale kikowaena e nānā i ka "ʻoiaʻiʻo" o kahi leka. Hana ʻia kēia e kahi ʻōnaehana māhele o nā nodes e pili ana i ka ʻae ʻana, a nona nā mea hoʻohana.
ʻAʻole hiki ke hoʻopaʻa ʻia - ʻaʻole hiki ke hoʻopaʻa ʻia nā moʻokāki a ʻaʻole hiki ke holoi ʻia nā memo.
ʻO ka hiki ke kiʻi i kāu mau kamaʻilio ʻana mai kekahi mea hana i kēlā me kēia manawa ʻo ia ka hiki ke mālama ʻole i nā kamaʻilio kūloko.
ʻO ka hōʻoia o ka hoʻouna ʻana i ka leka. ʻAʻole i ka mea hoʻohana, akā i ka pūnaewele. ʻO ka mea nui, he hōʻoia kēia i ka hiki i ka mea lawe ke heluhelu i kāu leka. He mea pono kēia no ka hoʻouna ʻana i nā leka hoʻomaopopo koʻikoʻi.
Loaʻa nā pōmaikaʻi Blockchain i ka hoʻopili pili ʻana me nā cryptocurrencies Ethereum, Dogecoin, Lisk, Dash, Bitcoin (keia mea e holomua nei) a me ka hiki ke hoʻouna i nā hōʻailona ma nā kamaʻilio. Ua hana mākou i kahi mea hoʻololi crypto i kūkulu ʻia.
A laila - pehea e hana ai.
ʻO kahi leka he kālepa
Ua maʻa nā mea a pau i ka ʻoiaʻiʻo o ka hoʻololi ʻana i nā hōʻailona blockchain (kālā) mai kekahi mea hoʻohana i kekahi. E like me Bitcoin. Ua hana mākou i kahi ʻano kālepa kūikawā no ka hoʻouna ʻana i nā leka.
No ka hoʻouna ʻana i kahi leka ma kahi ʻelele ma ka blockchain, pono ʻoe e hele i kekahi mau ala:
Hoʻopili i ke kikokikona memo
E hoʻokomo i ka ciphertext i kahi kālepa
E hōʻailona i ke kālepa
E hoʻouna i kahi kālepa i kekahi node pūnaewele
ʻO ka ʻōnaehana puʻupuʻu o nā nodes e hoʻoholo i ka "ʻoiaʻiʻo" o kahi leka
Inā maikaʻi nā mea a pau, ua hoʻokomo ʻia ke kālepa me ka memo ma ka poloka aʻe
Hoʻihoʻi ka mea loaʻa i ke kālepa memo a hoʻokaʻawale
Hana ʻia nā ʻanuʻu 1-3 a me 7 ma ka ʻāina ma luna o ka mea kūʻai aku, a hana ʻia nā ʻanuʻu 5-6 ma luna o nā mea hoʻokipa.
Hoʻopili memo
Hoʻopili ʻia ka memo me ke kī pilikino o ka mea hoʻouna a me ke kī lehulehu o ka mea i loaʻa. E lawe mākou i ke kī ākea mai ka pūnaewele, akā no kēia, pono e hoʻomaka mua ʻia ka moʻokāki o ka mea loaʻa, ʻo ia hoʻi, loaʻa ma kahi o hoʻokahi kālepa. Hiki iā ʻoe ke hoʻohana i kahi noi REST GET /api/accounts/getPublicKey?address={ADAMANT address}, a i ka wā e hoʻouka ai i nā kamaʻilio, e loaʻa ana nā kī ākea o ka poʻe interlocutors.
Hoʻopili ka ʻelele i nā memo me ka curve25519xsalsa20poly1305 algorithm (Pahu NaCl). No ka mea aia i loko o ka moʻokāki nā kī Ed25519, e hana i kahi pahu, pono e hoʻololi mua ʻia nā kī i Curve25519 Diffie-Hellman.
No ke kālepa memo, ʻo ka mea nui loa asset - pono ʻoe e kau i kahi memo ma ka mea chat me ka hale:
message - mālama i ka memo i hoʻopili ʻia
own_message -ʻaʻole
type — ʻano memo
Hoʻokaʻawale ʻia nā memo i nā ʻano. ʻO ka mea nui, ka parameter type haʻi iā ʻoe pehea e hoʻomaopopo ai message. Hiki iā ʻoe ke hoʻouna i kahi kikokikona wale nō, a i ʻole hiki iā ʻoe ke hoʻouna i kahi mea me nā mea hoihoi i loko - no ka laʻana, penei ke ʻano o ka ʻelele e hana ai i nā hoʻololi cryptocurrency i nā kamaʻilio.
No ka hōʻoia i ka hilinaʻi o nā mea a pau i ka ʻoiaʻiʻo o ka mea hoʻouna a me ka mea i loaʻa, ka manawa o ka hoʻouna ʻana a me ka ʻike o ka leka, ua kau inoa ʻia ke kālepa. Hiki iā ʻoe ke hōʻoia i ka ʻoiaʻiʻo o kahi kālepa e hoʻohana ana i kahi kī lehulehu - ʻaʻole pono kahi kī pilikino no kēia.
Akā hana ʻia ka pūlima ponoʻī me ke kī pilikino:
Hōʻike ke kiʻikuhi e hana mua mākou i ke kālepa me SHA-256 a laila kau inoa iā ia Ed25519 EdDSA a loaʻa i kahi pūlima signature, a ʻo ka ID kālepa he ʻāpana o ka SHA-256 hash.
Laʻana hoʻokō:
1 — E hana i kahi poloka ikepili, me kahi memo
/**
* 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)
}
ʻO kahi ʻōnaehana māhele o nā nodes, e pili ana i ka ʻae ʻana, e hoʻoholo i ka "ʻoiaʻiʻo" o ka leka kālepa. Mai ia wai a iā wai, i ka wā hea, inā paha i hoʻololi ʻia ka leka me kahi ʻē aʻe, a inā paha i hōʻike pololei ʻia ka manawa o ka hoʻouna ʻana. He mea koʻikoʻi koʻikoʻi kēia o ka blockchain - ʻaʻohe hale kikowaena i kuleana no ka hōʻoia, a ʻaʻole hiki ke hoʻopunipuni ʻia ke ʻano o nā memo a me kā lākou ʻike.
ʻO ka mea mua, e nānā ka node i ka pololei, a laila e hoʻouna aku i nā poʻe ʻē aʻe - inā ʻōlelo ka hapa nui ua pololei nā mea a pau, e hoʻokomo ʻia ke kālepa i ka poloka aʻe o ke kaulahao - ʻo ia ka ʻae.
Hiki ke ʻike ʻia ka ʻāpana o ke code node i kuleana no nā loiloi ma GitHub - validator.js и hōʻoia.js. ʻAe, holo ka node ma Node.js.
Hoʻokomo ʻia kahi kālepa me kahi memo ma kahi poloka
Inā loaʻa ka ʻae ʻana, e hoʻokomo ʻia ke kālepa me kā mākou leka i ka poloka aʻe me nā hana kūpono ʻē aʻe.
He kaʻina koʻikoʻi nā poloka, a ua hoʻokumu ʻia kēlā me kēia poloka ma muli o nā hashes o nā poloka mua.
ʻO ke kumu, ua hoʻokomo pū ʻia kā mākou leka i kēia kaʻina a ʻaʻole hiki ke "hoʻonohonoho hou ʻia". Inā hāʻule kekahi mau memo i loko o kahi poloka, e hoʻoholo ʻia kā lākou kauoha e timestamp nā memo.
Heluhelu i nā memo
Hoʻihoʻi ka noi ʻelele i nā kālepa mai ka blockchain i hoʻouna ʻia i ka mea loaʻa. No kēia hana mākou i kahi hopena api/chatrooms.
Loaʻa nā hana a pau i nā mea a pau - hiki iā ʻoe ke loaʻa nā memo i hoʻopili ʻia. Akā ʻo ka mea loaʻa wale nō e hiki ke hoʻokaʻawale me ka hoʻohana ʻana i kāna kī pilikino a me ke kī lehulehu o ka mea hoʻouna:
Ma muli o ka hoʻouna ʻia ʻana o nā memo ma kēia ʻano ma kahi o 5 kekona - ʻo ia ka manawa e ʻike ʻia ai kahi poloka pūnaewele hou - ua hele mai mākou me kahi pilina o ka client-to-node a me ka node-to-node socket. Ke loaʻa i kahi node kahi kālepa hou, nānā ʻo ia i kona kūpono a hoʻouna ʻia i nā node ʻē aʻe. Loaʻa ke kālepa i nā mea kūʻai aku ʻelele ma mua o ka hiki ʻana o ka ʻae a hoʻokomo ʻia i loko o ka poloka. Ma kēia ala mākou e hoʻouna koke aku ai i nā memo, e like me nā ʻelele koke.
No ka mālama ʻana i ka puke helu wahi, ua hana mākou i ka KVS - Key-Value Storage - ʻo ia kekahi ʻano kālepa ʻē aʻe asset ʻaʻole ʻo NaCl-pahu i hoʻopili ʻia, akā NaCl-pahu huna. Pēlā e mālama ai ka ʻelele i nā ʻikepili ʻē aʻe.
ʻO ka hoʻololi ʻana i nā faila/kiʻi a me nā kamaʻilio pūʻulu e koi nui i ka hana. ʻOiaʻiʻo, ma ke ʻano blunder-and-blunder e hiki ke "hoʻopaʻa ʻia" wikiwiki, akā makemake mākou e mālama i ka pae o ka pilikino.
ʻAe, aia nō nā hana e hana ʻia - ʻo ke kūpono, manaʻo ka pilikino maoli ʻaʻole e hoʻopili nā mea hoʻohana i nā node pūnaewele lehulehu, akā e hoʻāla i kā lākou iho. He aha ka pakeneka o nā mea hoʻohana i kou manaʻo e hana i kēia? Pololei, 0. Ua hiki iā mākou ke hoʻoponopono hapa i kēia pilikia me ka mana Tor o ka ʻelele.
Ua hōʻoia mākou e hiki ke noho kahi ʻelele ma ka blockchain. Ma mua, hoʻokahi wale nō ho'āʻo ma 2012 - bitmessage, i hāʻule ʻole ma muli o ka lōʻihi o ka lawe ʻana i nā memo, ka hoʻouka CPU, a me ka nele o nā polokalamu kelepona.
A ʻo ka skepticism ma muli o ka ʻike ʻana o nā ʻelele ma ka blockchain i mua o ko lākou manawa - ʻaʻole mākaukau nā kānaka e lawe i ke kuleana no kā lākou moʻokāki, ʻaʻole ia he ʻike pilikino i kēia manawa, ʻaʻole ʻae ka ʻenehana i nā wikiwiki kiʻekiʻe ma ka blockchain. E ʻike hou ʻia nā analogues ʻenehana hou o kā mākou papahana. E ʻike ʻoe.