Len messengerosa le nang le maemo a phahameng le sebetsa joang ho blockchain?

Qalong ea 2017, re ile ra qala ho theha lenģosa ho blockchain [lebitso le sehokelo li profilaneng] ka ho buisana ka melemo ho feta manqosa a khale a P2P.

Fetisitsoe 2.5 selemo, mme re khonne ho netefatsa mohopolo oa rona: likopo tsa manqosa li se li fumaneha bakeng sa iOS, Web PWA, Windows, GNU/Linux, Mac OS le Android.

Kajeno re tla u bolella hore na lenģosa la blockchain le sebetsa joang le hore na likopo tsa bareki li ka sebetsa joang le API ea eona.
Len messengerosa le nang le maemo a phahameng le sebetsa joang ho blockchain?

Re ne re batla hore blockchain e rarolle litaba tsa ts'ireletso le lekunutu tsa manģosa a P2P a khale:

  • Tobetsa e le 'ngoe ho theha ak'haonte - ha ho lifono kapa li-imeile, ha ho phihlello ea libuka tsa liaterese kapa li-geolocation.
  • Li-interlocutors ha ho mohla li theha likhokahano tse tobileng; puisano eohle e etsahala ka sistimi e ajoang ea li-node. Liaterese tsa IP tsa basebelisi ha li fumanehe ho tse ling.
  • Melaetsa eohle e patiloe End-to-End curve25519xsalsa20poly1305. Ho bonahala eka sena se ke ke sa makatsa mang kapa mang, empa khoutu ea rona ea mohloli e bulehile.
  • Tlhaselo ea MITM ha e akaretsoe - molaetsa o mong le o mong ke transaction mme o saennoe ke Ed25519 EdDSA.
  • Molaetsa o fella ka bolokong ba oona. Ho lumellana le timestamp U ke ke ua lokisa li-blocks, ka hona, tatellano ea melaetsa.
  • "Ha kea bua joalo" e ke ke ea sebetsa le melaetsa ho blockchain.
  • Ha ho na sebopeho se bohareng se hlahlobang "bonnete" ba molaetsa. Sena se etsoa ke sistimi e ajoang ea li-node e ipapisitseng le tumellano, 'me ke ea basebelisi.
  • Ha ho khonehe ho etsa lipatlisiso - li-account ha li khone ho thibeloa mme melaetsa e ke ke ea hlakoloa.
  • Blockchain 2FA ke mokhoa o mong oa hellish 2FA ka SMS, e sentse bophelo bo botle haholo.
  • Bokhoni ba ho fumana lipuisano tsohle tsa hau ho sesebelisoa leha e le sefe ka nako efe kapa efe bo bolela hore ha ua tlameha ho boloka lipuisano sebakeng sa heno ho hang.
  • Netefatso ya phano ya molaetsa. Eseng ho sesebelisoa sa mosebelisi, empa ho marang-rang. Ha e le hantle, sena ke netefatso ea bokhoni ba moamoheli ba ho bala molaetsa oa hau. Ena ke karolo ea bohlokoa bakeng sa ho romella litsebiso tsa bohlokoa.

Melemo ea Blockchain e boetse e kenyelletsa kamano e haufi le li-cryptocurrencies Ethereum, Dogecoin, Lisk, Dash, Bitcoin (ena e ntse e tsoela pele) le bokhoni ba ho romela li-tokens lipuisanong. Re bile ra etsa "crypto exchanger" e hahiloeng kahare.

Mme ebe - hore na tsohle di sebetsa jwang.

Molaetsa ke transaction

Motho e mong le e mong o se a ntse a tloaetse taba ea hore litšebelisano ho li-tokens tsa ho fetisetsa li-blockchain (lichelete tsa tšepe) ho tloha ho mosebelisi e mong ho ea ho e mong. Joalo ka Bitcoin. Re thehile mofuta o ikhethileng oa transaction bakeng sa ho fetisa melaetsa.

Ho romella molaetsa ho lenģosa ho blockchain, o hloka ho feta mehatong e mengata:

  1. Ngola mongolo oa molaetsa
  2. Kenya ciphertext ho transaction
  3. Saena transaction
  4. Romela transaction ho node efe kapa efe ea marang-rang
  5. Tsamaiso e ajoang ea li-node e etsa qeto ea "bonnete" ba molaetsa
  6. Haeba tsohle li lokile, transaction e nang le molaetsa e kenyellelitsoe bolokong bo latelang
  7. Moamoheli o fumana transaction ea molaetsa ebe oa hlakola

Mehato ea 1-3 le 7 e etsoa sebakeng sa heno ho moreki, 'me mehato ea 5-6 e etsoa ho ba amohelang.

Koetliso ea molaetsa

Molaetsa o kentsoe ka senotlolo ka senotlolo sa lekunutu sa motho ea o rometseng le senotlolo sa sechaba sa motho ea o rometseng. Re tla nka senotlolo sa sechaba ho tloha marang-rang, empa bakeng sa sena, akhaonto ea moamoheli e tlameha ho qalisoa, ke hore, bonyane e be le transaction e le 'ngoe. U ka sebelisa kopo ea REST GET /api/accounts/getPublicKey?address={ADAMANT address}, 'me ha ho kenya lipuisano, linotlolo tsa sechaba tsa li-interlocutors li tla be li se li le teng.

Len messengerosa le nang le maemo a phahameng le sebetsa joang ho blockchain?

Lenqosa le pata melaetsa le sebelisa algorithm ea curve25519xsalsa20poly1305 (Lebokose la NaCl). Kaha akhaonto e na le linotlolo tsa Ed25519, ho theha lebokose, linotlolo li tlameha ho fetoloa pele ho Curve25519 Diffie-Hellman.

Mohlala ke ona ho 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)
  }
}

Ho etsa khoebo ka molaetsa

Thekisetsano e na le sebopeho se akaretsang se latelang:

{
  "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": {}
}

Bakeng sa transaction ea molaetsa, ntho ea bohlokoa ka ho fetisisa ke asset - o hloka ho beha molaetsa ka har'a ntho chat ka sebopeho:

  • message - boloka molaetsa o patiloeng
  • own_message - ha ho letho
  • type — mofuta oa molaetsa

Melaetsa e boetse e arotsoe ka mefuta. Ha e le hantle, parameter type e u bolella mokhoa oa ho utloisisa message. U ka romela mongolo feela, kapa u ka romela ntho e nang le lintho tse thahasellisang ka hare - mohlala, ke kamoo lenģosa le etsang hore chelete ea crypto e fetisetsoe lipuisanong.

Ka lebaka leo, re theha transaction:

{
  "transaction": {
    "type": 8,
    "amount": 0,
    "senderId": "U12499126640447739963",
    "senderPublicKey": "e9cafb1e7b403c4cf247c94f73ee4cada367fcc130cb3888219a0ba0633230b6",
    "asset": {
      "chat": {
        "message": "cb682accceef92d7cddaaddb787d1184ab5428",
        "own_message": "e7d8f90ddf7d70efe359c3e4ecfb5ed3802297b248eacbd6",
        "type": 1
      }
    },
    "recipientId": "U15677078342684640219",
    "timestamp": 63228087,
    "signature": "тут будет подпись"
  }
}

Saeno ea transaction

Ho etsa bonnete ba hore motho e mong le e mong o kholisehile ka bonnete ba motho ea romelang le moamoheli, nako ea ho romella le litaba tsa molaetsa, transaction e saennoe. Saeno ea dijithale e u lumella ho netefatsa bonnete ba transaction u sebelisa senotlolo sa sechaba - senotlolo sa lekunutu ha se hlokehe bakeng sa sena.

Empa signature ka boeona e etsoa ho sebelisoa senotlolo sa lekunutu:

Len messengerosa le nang le maemo a phahameng le sebetsa joang ho blockchain?

Setšoantšo se bontša hore re qala ka hash transaction le SHA-256 ebe re e saena Ed25519 EdDSA mme o fumane tshaeno signature, 'me ID ea transaction ke karolo ea SHA-256 hash.

Mohlala oa ts'ebetsong:

1 — Theha block block ya data, ho kenyeletswa le molaetsa

/**
 * 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 - Bala SHA-256 ho tloha sebakeng sa data

/**
 * 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 - Saena transaction

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'))
}

Ho romella transaction ka molaetsa sebakeng sa marang-rang

Kaha marang-rang a khethiloe, leha e le efe ea li-node tse nang le API e bulehileng e tla e etsa. Ho etsa kopo ea POST ho ea qetellong api/transactions:

curl 'api/transactions' -X POST 
  -d 'TX_DATA'

Ho arabela re tla fumana ID ea transaction ea mofuta oo

{
    "success": true,
    "nodeTimestamp": 63228852,
    "transactionId": "6146865104403680934"
}

netefatso ea transaction

Tsamaiso e ajoang ea li-node, e thehiloeng tumellanong, e etsa qeto ea "bonnete" ba molaetsa oa transaction. Ho tsoa ho mang le ho mang, neng, hore na molaetsa o ile oa nkeloa sebaka ke o mong, le hore na nako ea ho romela e ne e bontšitsoe ka nepo. Ena ke molemo oa bohlokoa haholo oa blockchain - ha ho na mohaho o bohareng o ikarabellang bakeng sa ho netefatsa, 'me tatellano ea melaetsa le litaba tsa eona e ke ke ea etsoa.

Ntlha ea pele, node e le 'ngoe e hlahloba ho nepahala, ebe e e romela ho ba bang - haeba bongata bo re ntho e' ngoe le e 'ngoe e hlophisitsoe, transaction e tla kenngoa karolong e latelang ea ketane - sena ke tumellano.

Len messengerosa le nang le maemo a phahameng le sebetsa joang ho blockchain?

Karolo ea khoutu ea node e ikarabellang bakeng sa licheke e ka bonoa ho GitHub - validator.js и netefatsa.js. E, node e sebetsa ho Node.js.

Ho kenyeletsoa le thekisetsano e nang le molaetsa bolokong

Haeba ho fihleloa tumellano, transaction le molaetsa oa rona e tla kenyeletsoa bolokong bo latelang hammoho le litšebelisano tse ling tse nepahetseng.

Li-blocks li na le tatellano e tiileng, 'me boloko bo bong le bo bong bo latelang bo thehiloe ho latela li-hashes tsa li-block tse fetileng.

Len messengerosa le nang le maemo a phahameng le sebetsa joang ho blockchain?

Taba ke hore molaetsa oa rona o boetse o kenyelelitsoe tatelanong ena mme o ke ke oa "hlophisoa bocha". Haeba melaetsa e mengata e oela ka har'a block, taelo ea bona e tla khethoa ke timestamp melaetsa.

Ho bala melaetsa

Sesebelisoa sa messenger se fumana litšebelisano ho tsoa ho blockchain tse rometsoeng ho moamoheli. Bakeng sa sena re entse qeto api/chatrooms.

Litšebelisano tsohle li fumaneha ho motho e mong le e mong - o ka fumana melaetsa e patiloeng. Empa ke moamoheli feela ea ka hlakolang senotlolo a sebelisa senotlolo sa hae sa lekunutu le senotlolo sa sechaba sa motho ea rometseng:

**
 * 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) : ''
}

Mme ke eng hape?

Kaha melaetsa e fanoa ka tsela ena hoo e ka bang metsotsoana ea 5 - ena ke nako eo thibela e ncha ea marang-rang e hlahang - re tlile ka khokahanyo ea li-client-to-node le node-to-node socket. Ha node e amohela transaction e ncha, e hlahloba bonnete ba eona ebe e e fetisetsa ho li-node tse ling. Ts'ebetso e fumaneha ho bareki ba manqosa esita le pele tumellano e etsahala le ho kenngoa ho thibela. Ka tsela ena re tla fana ka melaetsa hang-hang, joalo ka manqosa a tloaelehileng a hang-hang.

Ho boloka buka ea liaterese, re entse KVS - Key-Value Storage - ona ke mofuta o mong oa transaction eo ho eona. asset ha se lebokose la NaCl le patiloeng, empa NaCl-secretbox. Ena ke tsela eo lenqosa le bolokang lintlha tse ling.

Ho fetisoa ha lifaele / litšoantšo le lipuisano tsa sehlopha li ntse li hloka mosebetsi o mongata. Ha e le hantle, ka mokhoa oa blunder-and-blunder sena se ka "senoa" kapele, empa re batla ho boloka boemo bo tšoanang ba boinotši.

E, ho ntse ho e-na le mosebetsi o lokelang ho etsoa - ha e le hantle, boinotši ba sebele bo nka hore basebelisi ba ke ke ba hokahanya le li-node tsa sechaba, empa ba tla phahamisa tsa bona. U nahana hore ke liperesente life tsa basebelisi ba etsang see? Ho joalo, 0. Re khonne ho rarolla bothata bona hanyane ka mofuta oa Tor oa lenqosa.

Re pakile hore lenģosa ho blockchain le ka ba teng. Pele, ho ne ho e-na le teko e le 'ngoe feela ka 2012 - bitmessage, e hlōlehileng ka lebaka la linako tse telele tsa ho fana ka melaetsa, CPU load, le khaello ea lisebelisoa tsa mohala.

'Me lipelaelo li bakoa ke taba ea hore manģosa a blockchain a ka pele ho nako ea bona - batho ha ba e-s'o itokiselitse ho nka boikarabelo ba akhaonto ea bona, ho ba le tlhahisoleseding ea botho ha e e-s'o be mokhoa,' me theknoloji ha e lumelle lebelo le phahameng thibela. Li-analogue tse ling tsa theknoloji tsa projeke ea rona li tla hlaha kamora moo. O tla bona.

Source: www.habr.com

Eketsa ka tlhaloso