பிளாக்செயினில் பரவலாக்கப்பட்ட தூதுவர் எவ்வாறு வேலை செய்கிறது?

2017 ஆம் ஆண்டின் தொடக்கத்தில், கிளாசிக் P2P மெசஞ்சர்களின் நன்மைகளைப் பற்றி விவாதிப்பதன் மூலம் பிளாக்செயினில் [பெயர் மற்றும் இணைப்பு சுயவிவரத்தில் உள்ளது] ஒரு தூதரை உருவாக்கத் தொடங்கினோம்.

தேர்ச்சி பெற்றார் 2.5 ஆண்டு, மற்றும் நாங்கள் எங்கள் கருத்தை உறுதிப்படுத்த முடிந்தது: iOS, Web PWA, Windows, GNU/Linux, Mac OS மற்றும் Android ஆகியவற்றிற்கு மெசஞ்சர் பயன்பாடுகள் இப்போது கிடைக்கின்றன.

பிளாக்செயின் மெசஞ்சர் எவ்வாறு செயல்படுகிறது மற்றும் கிளையன்ட் அப்ளிகேஷன்கள் அதன் API உடன் எவ்வாறு வேலை செய்ய முடியும் என்பதை இன்று நாங்கள் உங்களுக்கு கூறுவோம்.
பிளாக்செயினில் பரவலாக்கப்பட்ட தூதுவர் எவ்வாறு வேலை செய்கிறது?

கிளாசிக் P2P மெசஞ்சர்களின் பாதுகாப்பு மற்றும் தனியுரிமைச் சிக்கல்களை பிளாக்செயின் தீர்க்க வேண்டும் என்று நாங்கள் விரும்புகிறோம்:

  • ஒரு கணக்கை உருவாக்க ஒரே கிளிக்கில் - தொலைபேசிகள் அல்லது மின்னஞ்சல்கள் இல்லை, முகவரி புத்தகங்கள் அல்லது புவிஇருப்பிடங்களுக்கான அணுகல் இல்லை.
  • உரையாசிரியர்கள் ஒருபோதும் நேரடி இணைப்புகளை நிறுவுவதில்லை; அனைத்து தகவல்தொடர்புகளும் விநியோகிக்கப்பட்ட முனைகளின் மூலம் நடைபெறுகிறது. பயனர்களின் ஐபி முகவரிகள் ஒருவருக்கொருவர் அணுக முடியாது.
  • எல்லா செய்திகளும் என்ட்-டு-எண்ட் வளைவு25519xsalsa20poly1305 என்க்ரிப்ட் செய்யப்பட்டுள்ளன. இது யாரையும் ஆச்சரியப்படுத்தாது என்று தோன்றுகிறது, ஆனால் எங்கள் மூலக் குறியீடு திறந்தே உள்ளது.
  • MITM தாக்குதல் விலக்கப்பட்டுள்ளது - ஒவ்வொரு செய்தியும் ஒரு பரிவர்த்தனை மற்றும் Ed25519 EdDSA ஆல் கையொப்பமிடப்பட்டது.
  • செய்தி அதன் சொந்த தொகுதியில் முடிகிறது. நிலைத்தன்மை மற்றும் timestamp நீங்கள் தொகுதிகளை சரிசெய்ய முடியாது, எனவே செய்திகளின் வரிசை.
  • "நான் அதைச் சொல்லவில்லை" என்பது பிளாக்செயினில் உள்ள செய்திகளுடன் வேலை செய்யாது.
  • ஒரு செய்தியின் நம்பகத்தன்மையை சரிபார்க்கும் மைய அமைப்பு எதுவும் இல்லை. இது ஒருமித்த கருத்துகளின் அடிப்படையில் விநியோகிக்கப்பட்ட முனைகளின் அமைப்பால் செய்யப்படுகிறது, மேலும் இது பயனர்களுக்கு சொந்தமானது.
  • தணிக்கை சாத்தியமற்றது - கணக்குகளைத் தடுக்க முடியாது மற்றும் செய்திகளை நீக்க முடியாது.
  • பிளாக்செயின் 2FA என்பது குறுஞ்செய்தி மூலம் நரக 2FAக்கு மாற்றாகும், நிறைய ஆரோக்கியத்தை கெடுத்தது.
  • உங்கள் எல்லா உரையாடல்களையும் எந்த நேரத்திலும் எந்தச் சாதனத்திலிருந்தும் பெற முடியும் என்பது, நீங்கள் உரையாடல்களை உள்நாட்டில் சேமிக்க வேண்டியதில்லை.
  • செய்தி விநியோகத்தை உறுதிப்படுத்துதல். பயனரின் சாதனத்திற்கு அல்ல, ஆனால் பிணையத்திற்கு. முக்கியமாக, இது உங்கள் செய்தியைப் படிக்கும் பெறுநரின் திறனை உறுதிப்படுத்துவதாகும். முக்கியமான அறிவிப்புகளை அனுப்ப இது ஒரு பயனுள்ள அம்சமாகும்.

பிளாக்செயின் நன்மைகளில் கிரிப்டோகரன்சிகளான Ethereum, Dogecoin, Lisk, Dash, Bitcoin (இது இன்னும் செயல்பாட்டில் உள்ளது) மற்றும் அரட்டைகளில் டோக்கன்களை அனுப்பும் திறன் ஆகியவற்றுடன் நெருக்கமான ஒருங்கிணைப்பையும் உள்ளடக்கியது. நாங்கள் உள்ளமைக்கப்பட்ட கிரிப்டோ பரிமாற்றியை கூட உருவாக்கினோம்.

பின்னர் - இது எப்படி வேலை செய்கிறது.

செய்தி என்பது ஒரு பரிவர்த்தனை

பிளாக்செயினில் உள்ள பரிவர்த்தனைகள் ஒரு பயனரிடமிருந்து மற்றொருவருக்கு டோக்கன்களை (நாணயங்கள்) மாற்றும் உண்மை அனைவருக்கும் ஏற்கனவே பழக்கமாகிவிட்டது. பிட்காயின் போல. செய்திகளை அனுப்புவதற்கு ஒரு பிரத்யேக பரிவர்த்தனையை உருவாக்கினோம்.

பிளாக்செயினில் உள்ள மெசஞ்சரில் செய்தியை அனுப்ப, நீங்கள் பல படிகளைச் செய்ய வேண்டும்:

  1. செய்தி உரையை குறியாக்கு
  2. ஒரு பரிவர்த்தனையில் மறைக்குறியீட்டை வைக்கவும்
  3. பரிவர்த்தனையில் கையொப்பமிடுங்கள்
  4. எந்த நெட்வொர்க் முனைக்கும் பரிவர்த்தனையை அனுப்பவும்
  5. விநியோகிக்கப்பட்ட முனை அமைப்பு ஒரு செய்தியின் "நம்பகத்தன்மையை" தீர்மானிக்கிறது
  6. எல்லாம் சரியாக இருந்தால், செய்தியுடன் கூடிய பரிவர்த்தனை அடுத்த தொகுதியில் சேர்க்கப்படும்
  7. பெறுநர் செய்தி பரிவர்த்தனையை மீட்டெடுத்து மறைகுறியாக்குகிறார்

1-3 மற்றும் 7 படிகள் கிளையண்டில் உள்நாட்டில் செய்யப்படுகின்றன, மேலும் 5-6 படிகள் ஹோஸ்ட்களில் செய்யப்படுகின்றன.

செய்தி குறியாக்கம்

செய்தி அனுப்புநரின் தனிப்பட்ட விசை மற்றும் பெறுநரின் பொது விசையுடன் குறியாக்கம் செய்யப்பட்டுள்ளது. நெட்வொர்க்கிலிருந்து பொது விசையை எடுப்போம், ஆனால் இதற்காக, பெறுநரின் கணக்கு துவக்கப்பட வேண்டும், அதாவது குறைந்தபட்சம் ஒரு பரிவர்த்தனையாவது இருக்க வேண்டும். நீங்கள் REST கோரிக்கையைப் பயன்படுத்தலாம் GET /api/accounts/getPublicKey?address={ADAMANT address}, மற்றும் அரட்டைகளை ஏற்றும் போது, ​​உரையாசிரியர்களின் பொது விசைகள் ஏற்கனவே கிடைக்கும்.

பிளாக்செயினில் பரவலாக்கப்பட்ட தூதுவர் எவ்வாறு வேலை செய்கிறது?

மெசஞ்சர் வளைவு25519xsalsa20poly1305 அல்காரிதத்தைப் பயன்படுத்தி செய்திகளை குறியாக்குகிறது (NaCl பெட்டி) கணக்கில் Ed25519 விசைகள் இருப்பதால், ஒரு பெட்டியை உருவாக்க, விசைகளை முதலில் Curve25519 Diffie-Hellman ஆக மாற்ற வேண்டும்.

ஜாவாஸ்கிரிப்டில் ஒரு எடுத்துக்காட்டு இங்கே:

/**
 * 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 உடன் பரிவர்த்தனையை முதலில் ஹாஷ் செய்து பின்னர் அதில் கையொப்பமிடுகிறோம் என்பதை வரைபடம் காட்டுகிறது Ed25519 EdDSA மற்றும் கையெழுத்து பெறவும் 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'))
}

பிணைய முனைக்கு செய்தியுடன் பரிவர்த்தனையை அனுப்புதல்

நெட்வொர்க் பரவலாக்கப்பட்டதால், திறந்த API கொண்ட எந்த முனைகளும் செயல்படும். இறுதிப் புள்ளிக்கு POST கோரிக்கையை உருவாக்குதல் api/transactions:

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

பதிலுக்கு நாங்கள் வகையிலான பரிவர்த்தனை ஐடியைப் பெறுவோம்

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

பரிவர்த்தனை சரிபார்ப்பு

ஒருமித்த கருத்து அடிப்படையில் விநியோகிக்கப்பட்ட முனை அமைப்பு, பரிவர்த்தனை செய்தியின் "நம்பகத்தன்மையை" தீர்மானிக்கிறது. யாரிடமிருந்து, யாருக்கு, எப்போது, ​​செய்தி மற்றொன்றால் மாற்றப்பட்டதா, அனுப்பும் நேரம் சரியாகக் குறிப்பிடப்பட்டதா. இது பிளாக்செயினின் மிக முக்கியமான நன்மை - சரிபார்ப்புக்கு பொறுப்பான எந்த மைய அமைப்பும் இல்லை, மேலும் செய்திகளின் வரிசை மற்றும் அவற்றின் உள்ளடக்கத்தை போலியாக உருவாக்க முடியாது.

முதலில், ஒரு முனை துல்லியத்தை சரிபார்க்கிறது, பின்னர் அதை மற்றவர்களுக்கு அனுப்புகிறது - எல்லாம் ஒழுங்காக இருப்பதாக பெரும்பான்மை கூறினால், பரிவர்த்தனை சங்கிலியின் அடுத்த தொகுதியில் சேர்க்கப்படும் - இது ஒருமித்த கருத்து.

பிளாக்செயினில் பரவலாக்கப்பட்ட தூதுவர் எவ்வாறு வேலை செய்கிறது?

காசோலைகளுக்குப் பொறுப்பான முனைக் குறியீட்டின் பகுதியை GitHub இல் பார்க்கலாம் - Validator.js и சரிபார்க்கவும்.js. ஆம், நோட் Node.js இல் இயங்குகிறது.

ஒரு தொகுதியில் ஒரு செய்தியுடன் ஒரு பரிவர்த்தனை உட்பட

ஒருமித்த கருத்து எட்டப்பட்டால், எங்கள் செய்தியுடன் கூடிய பரிவர்த்தனையானது, மற்ற செல்லுபடியாகும் பரிவர்த்தனைகளுடன் அடுத்த தொகுதியில் சேர்க்கப்படும்.

தொகுதிகள் ஒரு கண்டிப்பான வரிசையைக் கொண்டுள்ளன, மேலும் ஒவ்வொரு அடுத்தடுத்த தொகுதிகளும் முந்தைய தொகுதிகளின் ஹாஷ்களின் அடிப்படையில் உருவாக்கப்படுகின்றன.

பிளாக்செயினில் பரவலாக்கப்பட்ட தூதுவர் எவ்வாறு வேலை செய்கிறது?

முக்கிய விஷயம் என்னவென்றால், எங்கள் செய்தியும் இந்த வரிசையில் சேர்க்கப்பட்டுள்ளது மற்றும் "மறுசீரமைக்க" முடியாது. பல செய்திகள் ஒரு தொகுதிக்குள் விழுந்தால், அவற்றின் வரிசை தீர்மானிக்கப்படும் 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 அது குறியாக்கம் செய்யப்பட்ட NaCl-box அல்ல, ஆனால் NaCl-ரகசியப்பெட்டி. இப்படித்தான் மெசஞ்சர் மற்ற தரவுகளை சேமிக்கிறது.

கோப்பு/பட இடமாற்றங்கள் மற்றும் குழு அரட்டைகளுக்கு இன்னும் நிறைய வேலை தேவைப்படுகிறது. நிச்சயமாக, தவறு மற்றும் தவறு வடிவத்தில் இது விரைவாக "ஸ்க்ரீவ் அப்" செய்யப்படலாம், ஆனால் அதே அளவிலான தனியுரிமையை நாங்கள் பராமரிக்க விரும்புகிறோம்.

ஆம், இன்னும் செய்ய வேண்டிய வேலை உள்ளது - உண்மையில், உண்மையான தனியுரிமை பயனர்கள் பொது நெட்வொர்க் முனைகளுடன் இணைக்கப்படாது, ஆனால் அவர்களது சொந்தத்தை உயர்த்தும் என்று கருதுகிறது. எத்தனை சதவீத பயனர்கள் இதைச் செய்கிறார்கள் என்று நினைக்கிறீர்கள்? அது சரி, 0. மெசஞ்சரின் டோர் பதிப்பின் மூலம் இந்த சிக்கலை ஓரளவு தீர்க்க முடிந்தது.

பிளாக்செயினில் ஒரு தூதர் இருக்க முடியும் என்பதை நாங்கள் நிரூபித்துள்ளோம். இதற்கு முன்பு, 2012 இல் ஒரே ஒரு முயற்சி மட்டுமே இருந்தது - பிட்மெசேஜ், இது நீண்ட செய்தி டெலிவரி நேரங்கள், CPU சுமை மற்றும் மொபைல் பயன்பாடுகள் இல்லாததால் தோல்வியடைந்தது.

பிளாக்செயினில் உள்ள தூதர்கள் தங்கள் நேரத்திற்கு முன்னால் இருப்பதால் சந்தேகம் ஏற்படுகிறது - மக்கள் தங்கள் கணக்கிற்கு பொறுப்பேற்கத் தயாராக இல்லை, தனிப்பட்ட தகவல்களை வைத்திருப்பது இன்னும் ஒரு போக்காக இல்லை, மேலும் தொழில்நுட்பம் பிளாக்செயினில் அதிக வேகத்தை அனுமதிக்காது. எங்கள் திட்டத்தின் கூடுதல் தொழில்நுட்ப ஒப்புமைகள் அடுத்து தோன்றும். நீங்கள் காண்பீர்கள்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்