ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ ವಿಕೇಂದ್ರೀಕೃತ ಮೆಸೆಂಜರ್ ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ?

2017 ರ ಆರಂಭದಲ್ಲಿ, ನಾವು ಕ್ಲಾಸಿಕ್ P2P ಮೆಸೆಂಜರ್‌ಗಳ ಮೇಲೆ ಪ್ರಯೋಜನಗಳನ್ನು ಚರ್ಚಿಸುವ ಮೂಲಕ ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ [ಹೆಸರು ಮತ್ತು ಲಿಂಕ್ ಪ್ರೊಫೈಲ್‌ನಲ್ಲಿದೆ] ಸಂದೇಶವಾಹಕವನ್ನು ರಚಿಸಲು ಪ್ರಾರಂಭಿಸಿದ್ದೇವೆ.

ಉತ್ತೀರ್ಣರಾದರು 2.5 ವರ್ಷ, ಮತ್ತು ನಾವು ನಮ್ಮ ಪರಿಕಲ್ಪನೆಯನ್ನು ದೃಢೀಕರಿಸಲು ಸಾಧ್ಯವಾಯಿತು: ಮೆಸೆಂಜರ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಈಗ iOS, ವೆಬ್ PWA, Windows, GNU/Linux, Mac OS ಮತ್ತು Android ಗಾಗಿ ಲಭ್ಯವಿದೆ.

ಬ್ಲಾಕ್‌ಚೈನ್ ಮೆಸೆಂಜರ್ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಮತ್ತು ಅದರ API ಯೊಂದಿಗೆ ಕ್ಲೈಂಟ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಎಂಬುದನ್ನು ಇಂದು ನಾವು ನಿಮಗೆ ತಿಳಿಸುತ್ತೇವೆ.
ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ ವಿಕೇಂದ್ರೀಕೃತ ಮೆಸೆಂಜರ್ ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ?

ಕ್ಲಾಸಿಕ್ P2P ಮೆಸೆಂಜರ್‌ಗಳ ಭದ್ರತೆ ಮತ್ತು ಗೌಪ್ಯತೆ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು ನಾವು ಬ್ಲಾಕ್‌ಚೈನ್ ಬಯಸಿದ್ದೇವೆ:

  • ಖಾತೆಯನ್ನು ರಚಿಸಲು ಒಂದು ಕ್ಲಿಕ್ - ಫೋನ್‌ಗಳು ಅಥವಾ ಇಮೇಲ್‌ಗಳಿಲ್ಲ, ವಿಳಾಸ ಪುಸ್ತಕಗಳು ಅಥವಾ ಜಿಯೋಲೊಕೇಶನ್‌ಗಳಿಗೆ ಪ್ರವೇಶವಿಲ್ಲ.
  • ಸಂವಾದಕರು ಎಂದಿಗೂ ನೇರ ಸಂಪರ್ಕಗಳನ್ನು ಸ್ಥಾಪಿಸುವುದಿಲ್ಲ; ಎಲ್ಲಾ ಸಂವಹನವು ನೋಡ್ಗಳ ವಿತರಣೆ ವ್ಯವಸ್ಥೆಯ ಮೂಲಕ ನಡೆಯುತ್ತದೆ. ಬಳಕೆದಾರರ IP ವಿಳಾಸಗಳು ಪರಸ್ಪರ ಪ್ರವೇಶಿಸಲಾಗುವುದಿಲ್ಲ.
  • ಎಲ್ಲಾ ಸಂದೇಶಗಳನ್ನು ಎಂಡ್-ಟು-ಎಂಡ್ ಕರ್ವ್25519xsalsa20poly1305 ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಇದು ಯಾರಿಗೂ ಆಶ್ಚರ್ಯವಾಗುವುದಿಲ್ಲ ಎಂದು ತೋರುತ್ತದೆ, ಆದರೆ ನಮ್ಮ ಮೂಲ ಕೋಡ್ ತೆರೆದಿರುತ್ತದೆ.
  • MITM ದಾಳಿಯನ್ನು ಹೊರಗಿಡಲಾಗಿದೆ - ಪ್ರತಿ ಸಂದೇಶವು ವಹಿವಾಟಾಗಿದೆ ಮತ್ತು Ed25519 EdDSA ನಿಂದ ಸಹಿ ಮಾಡಲಾಗಿದೆ.
  • ಸಂದೇಶವು ತನ್ನದೇ ಆದ ಬ್ಲಾಕ್‌ನಲ್ಲಿ ಕೊನೆಗೊಳ್ಳುತ್ತದೆ. ಸ್ಥಿರತೆ ಮತ್ತು timestamp ನೀವು ಬ್ಲಾಕ್ಗಳನ್ನು ಸರಿಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ, ಮತ್ತು ಆದ್ದರಿಂದ ಸಂದೇಶಗಳ ಕ್ರಮ.
  • "ನಾನು ಅದನ್ನು ಹೇಳಲಿಲ್ಲ" ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿನ ಸಂದೇಶಗಳೊಂದಿಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ.
  • ಸಂದೇಶದ "ದೃಢೀಕರಣ" ವನ್ನು ಪರಿಶೀಲಿಸುವ ಯಾವುದೇ ಕೇಂದ್ರ ರಚನೆ ಇಲ್ಲ. ಒಮ್ಮತದ ಆಧಾರದ ಮೇಲೆ ವಿತರಿಸಲಾದ ನೋಡ್‌ಗಳ ವ್ಯವಸ್ಥೆಯಿಂದ ಇದನ್ನು ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ಇದು ಬಳಕೆದಾರರ ಒಡೆತನದಲ್ಲಿದೆ.
  • ಸೆನ್ಸಾರ್ಶಿಪ್ನ ಅಸಾಧ್ಯತೆ - ಖಾತೆಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗುವುದಿಲ್ಲ ಮತ್ತು ಸಂದೇಶಗಳನ್ನು ಅಳಿಸಲಾಗುವುದಿಲ್ಲ.
  • ಬ್ಲಾಕ್‌ಚೈನ್ 2FA ಎಂಬುದು SMS ಮೂಲಕ ನರಕದ 2FA ಗೆ ಪರ್ಯಾಯವಾಗಿದೆ, ಬಹಳಷ್ಟು ಆರೋಗ್ಯವನ್ನು ಹಾಳುಮಾಡಿದೆ.
  • ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಯಾವುದೇ ಸಾಧನದಿಂದ ನಿಮ್ಮ ಎಲ್ಲಾ ಸಂಭಾಷಣೆಗಳನ್ನು ಪಡೆಯುವ ಸಾಮರ್ಥ್ಯ ಎಂದರೆ ನೀವು ಸಂಭಾಷಣೆಗಳನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಸಂಗ್ರಹಿಸಬೇಕಾಗಿಲ್ಲ.
  • ಸಂದೇಶ ವಿತರಣೆಯ ದೃಢೀಕರಣ. ಬಳಕೆದಾರರ ಸಾಧನಕ್ಕೆ ಅಲ್ಲ, ಆದರೆ ನೆಟ್ವರ್ಕ್ಗೆ. ಮೂಲಭೂತವಾಗಿ, ಇದು ನಿಮ್ಮ ಸಂದೇಶವನ್ನು ಓದುವ ಸ್ವೀಕರಿಸುವವರ ಸಾಮರ್ಥ್ಯದ ದೃಢೀಕರಣವಾಗಿದೆ. ನಿರ್ಣಾಯಕ ಅಧಿಸೂಚನೆಗಳನ್ನು ಕಳುಹಿಸಲು ಇದು ಉಪಯುಕ್ತ ವೈಶಿಷ್ಟ್ಯವಾಗಿದೆ.

ಬ್ಲಾಕ್‌ಚೈನ್ ಪ್ರಯೋಜನಗಳು ಕ್ರಿಪ್ಟೋಕರೆನ್ಸಿಗಳಾದ ಎಥೆರಿಯಮ್, ಡಾಗ್‌ಕಾಯಿನ್, ಲಿಸ್ಕ್, ಡ್ಯಾಶ್, ಬಿಟ್‌ಕಾಯಿನ್ (ಇದು ಇನ್ನೂ ಪ್ರಗತಿಯಲ್ಲಿದೆ) ಮತ್ತು ಚಾಟ್‌ಗಳಲ್ಲಿ ಟೋಕನ್‌ಗಳನ್ನು ಕಳುಹಿಸುವ ಸಾಮರ್ಥ್ಯದೊಂದಿಗೆ ನಿಕಟ ಏಕೀಕರಣವನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ. ನಾವು ಅಂತರ್ನಿರ್ಮಿತ ಕ್ರಿಪ್ಟೋ ವಿನಿಮಯಕಾರಕವನ್ನು ಸಹ ಮಾಡಿದ್ದೇವೆ.

ತದನಂತರ - ಇದು ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ.

ಸಂದೇಶವು ವ್ಯವಹಾರವಾಗಿದೆ

ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿನ ವಹಿವಾಟುಗಳು ಒಬ್ಬ ಬಳಕೆದಾರರಿಂದ ಇನ್ನೊಬ್ಬರಿಗೆ ಟೋಕನ್‌ಗಳನ್ನು (ನಾಣ್ಯಗಳು) ವರ್ಗಾಯಿಸುತ್ತವೆ ಎಂಬ ಅಂಶಕ್ಕೆ ಪ್ರತಿಯೊಬ್ಬರೂ ಈಗಾಗಲೇ ಒಗ್ಗಿಕೊಂಡಿರುತ್ತಾರೆ. ಬಿಟ್‌ಕಾಯಿನ್‌ನಂತೆ. ಸಂದೇಶಗಳನ್ನು ರವಾನಿಸಲು ನಾವು ವಿಶೇಷ ರೀತಿಯ ವಹಿವಾಟನ್ನು ರಚಿಸಿದ್ದೇವೆ.

ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ ಸಂದೇಶವಾಹಕದಲ್ಲಿ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು, ನೀವು ಹಲವಾರು ಹಂತಗಳ ಮೂಲಕ ಹೋಗಬೇಕಾಗುತ್ತದೆ:

  1. ಸಂದೇಶ ಪಠ್ಯವನ್ನು ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಿ
  2. ವ್ಯವಹಾರಕ್ಕೆ ಸೈಫರ್‌ಟೆಕ್ಸ್ಟ್ ಅನ್ನು ಹಾಕಿ
  3. ವಹಿವಾಟಿಗೆ ಸಹಿ ಮಾಡಿ
  4. ಯಾವುದೇ ನೆಟ್‌ವರ್ಕ್ ನೋಡ್‌ಗೆ ವಹಿವಾಟನ್ನು ಕಳುಹಿಸಿ
  5. ನೋಡ್‌ಗಳ ವಿತರಣೆ ವ್ಯವಸ್ಥೆಯು ಸಂದೇಶದ "ದೃಢೀಕರಣ" ವನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ
  6. ಎಲ್ಲವೂ ಸರಿಯಾಗಿದ್ದರೆ, ಸಂದೇಶದೊಂದಿಗಿನ ವಹಿವಾಟನ್ನು ಮುಂದಿನ ಬ್ಲಾಕ್‌ನಲ್ಲಿ ಸೇರಿಸಲಾಗಿದೆ
  7. ಸ್ವೀಕರಿಸುವವರು ಸಂದೇಶ ವ್ಯವಹಾರವನ್ನು ಹಿಂಪಡೆಯುತ್ತಾರೆ ಮತ್ತು ಡೀಕ್ರಿಪ್ಟ್ ಮಾಡುತ್ತಾರೆ

ಕ್ಲೈಂಟ್‌ನಲ್ಲಿ 1-3 ಮತ್ತು 7 ಹಂತಗಳನ್ನು ಸ್ಥಳೀಯವಾಗಿ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ ಮತ್ತು 5-6 ಹಂತಗಳನ್ನು ಹೋಸ್ಟ್‌ಗಳಲ್ಲಿ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ.

ಸಂದೇಶ ಎನ್‌ಕ್ರಿಪ್ಶನ್

ಸಂದೇಶವನ್ನು ಕಳುಹಿಸುವವರ ಖಾಸಗಿ ಕೀ ಮತ್ತು ಸ್ವೀಕರಿಸುವವರ ಸಾರ್ವಜನಿಕ ಕೀಲಿಯೊಂದಿಗೆ ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗಿದೆ. ನಾವು ನೆಟ್‌ವರ್ಕ್‌ನಿಂದ ಸಾರ್ವಜನಿಕ ಕೀಲಿಯನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತೇವೆ, ಆದರೆ ಇದಕ್ಕಾಗಿ, ಸ್ವೀಕರಿಸುವವರ ಖಾತೆಯನ್ನು ಪ್ರಾರಂಭಿಸಬೇಕು, ಅಂದರೆ, ಕನಿಷ್ಠ ಒಂದು ವಹಿವಾಟನ್ನು ಹೊಂದಿರಬೇಕು. ನೀವು REST ವಿನಂತಿಯನ್ನು ಬಳಸಬಹುದು GET /api/accounts/getPublicKey?address={ADAMANT address}, ಮತ್ತು ಚಾಟ್‌ಗಳನ್ನು ಲೋಡ್ ಮಾಡುವಾಗ, ಇಂಟರ್ಲೋಕ್ಯೂಟರ್‌ಗಳ ಸಾರ್ವಜನಿಕ ಕೀಗಳು ಈಗಾಗಲೇ ಲಭ್ಯವಿರುತ್ತವೆ.

ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ ವಿಕೇಂದ್ರೀಕೃತ ಮೆಸೆಂಜರ್ ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ?

ಸಂದೇಶವಾಹಕವು curve25519xsalsa20poly1305 ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಸಂದೇಶಗಳನ್ನು ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡುತ್ತದೆ (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, ಮತ್ತು ವಹಿವಾಟು ID 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 ನಲ್ಲಿ ವೀಕ್ಷಿಸಬಹುದು - ವ್ಯಾಲಿಡೇಟರ್.ಜೆಎಸ್ и verify.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-ಬಾಕ್ಸ್ ಅಲ್ಲ, ಆದರೆ NaCl-ರಹಸ್ಯ ಪೆಟ್ಟಿಗೆ. ಈ ರೀತಿಯಾಗಿ ಮೆಸೆಂಜರ್ ಇತರ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ.

ಫೈಲ್/ಇಮೇಜ್ ವರ್ಗಾವಣೆಗಳು ಮತ್ತು ಗುಂಪು ಚಾಟ್‌ಗಳಿಗೆ ಇನ್ನೂ ಹೆಚ್ಚಿನ ಕೆಲಸ ಬೇಕಾಗುತ್ತದೆ. ಸಹಜವಾಗಿ, ಪ್ರಮಾದ ಮತ್ತು ಪ್ರಮಾದ ರೂಪದಲ್ಲಿ ಇದನ್ನು ತ್ವರಿತವಾಗಿ "ಸ್ಕ್ರೂಡ್ ಅಪ್" ಮಾಡಬಹುದು, ಆದರೆ ನಾವು ಅದೇ ಮಟ್ಟದ ಗೌಪ್ಯತೆಯನ್ನು ಕಾಪಾಡಿಕೊಳ್ಳಲು ಬಯಸುತ್ತೇವೆ.

ಹೌದು, ಇನ್ನೂ ಮಾಡಬೇಕಾದ ಕೆಲಸವಿದೆ - ಆದರ್ಶಪ್ರಾಯವಾಗಿ, ನೈಜ ಗೌಪ್ಯತೆಯು ಬಳಕೆದಾರರು ಸಾರ್ವಜನಿಕ ನೆಟ್‌ವರ್ಕ್ ನೋಡ್‌ಗಳಿಗೆ ಸಂಪರ್ಕಿಸುವುದಿಲ್ಲ ಎಂದು ಊಹಿಸುತ್ತದೆ, ಆದರೆ ತಮ್ಮದೇ ಆದದನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ. ಯಾವ ಶೇಕಡಾವಾರು ಬಳಕೆದಾರರು ಇದನ್ನು ಮಾಡುತ್ತಾರೆ ಎಂದು ನೀವು ಯೋಚಿಸುತ್ತೀರಿ? ಅದು ಸರಿ, 0. ಮೆಸೆಂಜರ್‌ನ ಟಾರ್ ಆವೃತ್ತಿಯೊಂದಿಗೆ ನಾವು ಈ ಸಮಸ್ಯೆಯನ್ನು ಭಾಗಶಃ ಪರಿಹರಿಸಲು ಸಾಧ್ಯವಾಯಿತು.

ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ ಮೆಸೆಂಜರ್ ಅಸ್ತಿತ್ವದಲ್ಲಿರಬಹುದು ಎಂದು ನಾವು ಸಾಬೀತುಪಡಿಸಿದ್ದೇವೆ. ಹಿಂದೆ, 2012 ರಲ್ಲಿ ಒಂದೇ ಒಂದು ಪ್ರಯತ್ನವಿತ್ತು - ಬಿಟ್ಮೆಸೇಜ್, ಇದು ದೀರ್ಘ ಸಂದೇಶ ವಿತರಣಾ ಸಮಯಗಳು, CPU ಲೋಡ್ ಮತ್ತು ಮೊಬೈಲ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ಕೊರತೆಯಿಂದಾಗಿ ವಿಫಲವಾಗಿದೆ.

ಮತ್ತು ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿರುವ ಸಂದೇಶವಾಹಕರು ತಮ್ಮ ಸಮಯಕ್ಕಿಂತ ಮುಂದಿದ್ದಾರೆ ಎಂಬ ಅಂಶದಿಂದಾಗಿ ಸಂದೇಹವಿದೆ - ಜನರು ತಮ್ಮ ಖಾತೆಯ ಜವಾಬ್ದಾರಿಯನ್ನು ತೆಗೆದುಕೊಳ್ಳಲು ಸಿದ್ಧರಿಲ್ಲ, ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಯನ್ನು ಹೊಂದಿರುವುದು ಇನ್ನೂ ಪ್ರವೃತ್ತಿಯಾಗಿಲ್ಲ, ಮತ್ತು ತಂತ್ರಜ್ಞಾನವು ಬ್ಲಾಕ್‌ಚೈನ್‌ನಲ್ಲಿ ಹೆಚ್ಚಿನ ವೇಗವನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ. ನಮ್ಮ ಯೋಜನೆಯ ಹೆಚ್ಚಿನ ತಾಂತ್ರಿಕ ಅನಲಾಗ್‌ಗಳು ಮುಂದೆ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ. ನೀವು ನೋಡುತ್ತೀರಿ.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ