Quomodo nuntius decentralized in claustro operatur?

Ineunte 2017 nuntium in impedimento creando incepimus [nomen et nexus in profano] tractando commoda de nuntiis classicis P2P.

Gone 2.5 anno, et conceptum nostrum confirmare poteramus: nuncius applicationes praesto sunt iOS, interreti PWA, Windows, GNU/Linux, Mac OS et Android.

Hodie tibi narrabimus quomodo impedimentum nuntius operatur et quomodo clientelae applicationes cum suis API operari possunt.
Quomodo nuntius decentralized in claustro operatur?

Volumus impedimentum solvere securitatem et secretum quaestiones classicarum P2P nuntiorum:

  • Unum strepita ut rationem creo - nullas phones vel electronicas electronicas, nulla accessus ad libros electronicos vel geolocationes.
  • Interlocutores nunquam nexus directos constituunt, omnis communicatio fit per systema nodi dispertitum. User 'IP inscriptiones inter se pervias non sunt.
  • Omnes epistulae encryptae sunt Fin-ad-End curve25519xsalsa20poly1305. Hoc non mirum videtur, sed fons noster apertus est.
  • MITM impetus excluditur - unaquaeque nuntius gestum est et ab Ed25519 EdDSA signatur.
  • Nuntius in suo clauso desinit. constantia et timestamp Caudices figere non potes, ideoque ordo nuntiorum.
  • "Non dixi" cum nuntiis in claustro non operari.
  • Nulla structura centralis quae "authenticitatem" reticet per nuntium. Hoc fit per systema nodi dispertitum secundum consensum innixum, et possidetur ab usoribus.
  • Impossibilitas censurae - rationes obstrui non possunt, nuntiique deleri non possunt.
  • Claustrum 2FA jocus est ad tartareum 2FA per SMS, multum perdidit salutem.
  • Facultatem ad omnia colloquia tua ab aliquo artificio quovis tempore acquirere significat, colloquia omnino localiter condere non debes.
  • Confirmatio est nuntius traditionis. Non ad machinam usoris, sed ad ornatum. Essentialiter haec confirmatio facultatis recipientis nuntium tuum legebat. Hoc pluma utilis est ad notificationes criticas mittendas.

Claustrum beneficiorum etiam arctam integrationem comprehendunt cum crypto-currencies Ethereum, Dogecoin, Lisk, Dash, BitCoin (hoc adhuc in cursu est) et facultas signa mittendi in confabulationibus. Etiam in crypto-mutario aedificatum fecimus.

Et tunc - quomodo omnia operatur.

Nuntium est transaction

Omnes iam consueverunt factum esse transactiones in claustro transferre signa (denarios) ab uno usu in alium. BitCoin placet. Peculiare genus transactionis creavimus nuntiis transmittendis.

Nuntium mittere in impedimento nuntium, per plures gradus ire debes:

  1. Encrypt nuntius text
  2. Ciphertext posuit in transaction
  3. Sign negotio
  4. Mitte ad rem ad network nodi
  5. Systema nodi distributum determinat "veritatem" nuntii
  6. Si omnia OK est, negotium cum verbo comprehenditur in proximo clauso
  7. Quod recipiens retrieve nuntium re et decrypts

Gradus 1-3 et 7 localiter in cliente fiunt, et gradus 5-6 exercentur in exercitibus.

Nuntius encryption

Haec epistula inscribitur cum clavis privatis mittentis et clavis publica recipientis. Publicam clavem e retis capiemus, sed huius ratio oportet initializari recipientis, hoc est, saltem unam rem habere. Vos can cetera petitio GET /api/accounts/getPublicKey?address={ADAMANT address}et, cum colloquia levabunt, claves publicae interlocutorum iam praesto erunt.

Quomodo nuntius decentralized in claustro operatur?

nuntius encryptae nuntia utentes algorithm curva25519xsalsa20poly1305 (NaCl Box). Cum tabulae clavium Ed25519 contineat, ut pyxidem effingant, claves ad Curve25519 Diffie-Hellman primum convertendae sunt.

Hic exemplum est in 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)
  }
}

Transactionem cum nuntio formans

Transactio habet sequentem structuram generalem;

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

Nuntium ad rem praecipuum est asset - debes ponere nuntium in obiecto chat cum structura;

  • message - nisi encrypted nuntium
  • own_message - nonce
  • type - nuntius genus

Mandata quoque in typos divisa sunt. Essentialiter, modulus type narrat quam intelligere message. Textum tantum mittere potes, aut rem cum rebus iucundis intus mittere potes - exempli gratia, hoc modo nuntius cryptocurrency transfert in confabulationibus.

Quam ob rem rem gestam facimus:

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

Subscriptio transactionis

Ut quisque confidat in mittentis et recipientis authenticitate, tempus mittendi et argumenti nuntii, gestum signatum est. Subscriptio digitalis permittit te cognoscere authenticitatem transactionis utentis clavi publici - clavis privata ad hoc non opus est.

Sed subscriptio ipsa exhibetur clavis privatis utens;

Quomodo nuntius decentralized in claustro operatur?

Tabula ostendit nos primum rem cum SHA 256 detrahere et deinde eam signare Ed25519 EdDSA et a signature signatureet transactionis ID est pars SHA-256 Nullam.

Exemplum exsecutionis:

1 - forma data scandalum, inter nuntium

/**
 * 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-CCLVI ex notitia scandali

/**
 * 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()
}

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

Mittens in re cum nuntium ad modum retis nodi

Cum sit decentralized network, nulla nodes aperta API faciam. Post petere finem facere api/transactions:

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

In responsione nos recipere id genus in transaction

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

Transactio Validation

Systema nodis distributum, ex consensu innixum, nuntium transactionis determinat. A quo et ad quem, utrum cum alio substitutum sit, et an tempus mittendi recte indicatum sit. Haec utilitas maxima impedimenti est - nulla centralis structura quae verificationis author est, ac series epistularum earumque contenta ementiri non possunt.

Primum, unus nodi accurationem coercet, et deinde ad alios mittit, si plures dixerit omnia esse in ordine, transactio in proximo trunco ​​catenae inclusa erit — hoc est consensus.

Quomodo nuntius decentralized in claustro operatur?

Pars nodi codicis quae ad compescendos pertinet, in GitHub spectari potest. validator.js и cognoscere.js. Yep, node currit in Node.js.

Comprehendo a re per nuntium ad obstructionum

Si consensus pervenerit, negotium cum nostro nuntio in proximo stipite cum aliis rebus validis comprehendetur.

Caudices stricte habent consequentiam, et quilibet posterior clausus fundatur in stipitibus praecedentium stipitibus.

Quomodo nuntius decentralized in claustro operatur?

Prorsus est nuntium nostrum in hac serie etiam comprehendi nec « retractari ». Si plures nuntii in scandalum ceciderint, eorum ordo per " timestamp nuntia.

Lectio epistulae

Nuntius applicationem retractat transactiones ex impedimento qui mittuntur recipienti. Hoc enim finem fecimus api/chatrooms.

Omnes transactions omnibus praesto sunt - epistulas encryptas accipere potes. Solus autem recipiens minui potest utens clavis privatis suis et clavem publicam mittentis:

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

Et quod aliud?

Cum nuntii hoc modo traditi sunt circiter 5 seconds - hoc tempus apparet novum scandalum retis - conscendimus cum cliente-ad nodi ac nodi nexu nodi ad nervum. Cum nodi novam transactionem accipit, eius validitatem coercet et ad alios nodos promovet. Transactio clientibus nuncio praesto est etiam antequam consensus fiat et inclusio in scandalum. Hoc modo nuntios statim trademus, sicut iusto nuntios instant.

Ut librum inscriptionis reponemus, KVS - Key-Value Repono - hoc aliud genus transactionis est in quo asset non est arca NaCl, quod encryptum est, sed NaCl-secretbox. Hoc est, quomodo nuntius alias notitias reponit.

Tabulae / imaginis translationes et sermones sodalitatis multum laboris adhuc requirunt. Nimirum in forma erroris et erroris haec cito "concurta" fieri potest, sed aequalem intimitatem servare volumus.

Etiam, est adhuc opus faciendum - idealismo, secretum reale ponit quod utentes ad nodos retis publici non coniungunt, sed suos excitabunt. Quid recipis users hoc putatis? Iustum est, 0. Hanc quaestionem cum Tor versio nuntii partim solvere poteramus.

Probavimus nuntium in claustro existere posse. Antea unus tantum conatus in MMXII erat - bitmessage, quae propter longas traditionis tempora, CPU onus et indigentiam applicationum mobilium, defecit.

Et scepticismus ob hoc accidit quod nuntii in impedimento praecedunt tempus suum - homines non sunt parati ad susceptionem sui rationis, habentes informationes personales nondum inclinatio, et technicae velocitates in impedimento non patitur. Plures analogae technologicae propositi nostri in proximo apparebunt. Youll 'animadverto.

Source: www.habr.com

Add a comment