diff --git a/mb-xrpl/mb-xrpl.js b/mb-xrpl/mb-xrpl.js index b2b7a02..b08e01a 100644 --- a/mb-xrpl/mb-xrpl.js +++ b/mb-xrpl/mb-xrpl.js @@ -59,6 +59,7 @@ class MessageBoard { catch (e) { throw e; } this.xrplAcc = new XrplAccount(this.rippleAPI, this.cfg.xrpl.address, this.cfg.xrpl.secret); + this.accKeyPair = this.xrplAcc.deriveKeypair(); if (IS_DEREGISTER) { await this.deregisterHost(); @@ -136,7 +137,15 @@ class MessageBoard { // The last validated ledger when we receive the redeem request. const startingValidatedLedger = this.lastValidatedLedgerSequence; - const createRes = await this.sashiCli.createInstance(JSON.parse(memo.data)); + + // Decrypt redeem requirements using the decryption key derived from host secret. + const instanceRequirements = await EncryptionHelper.decrypt(this.accKeyPair.privateKey, memo.data); + if (!instanceRequirements) { + console.log('Failed to decrypt redeem data.'); + break; + } + + const createRes = await this.sashiCli.createInstance(instanceRequirements); // Number of validated ledgers passed while the instance is created. const diff = this.lastValidatedLedgerSequence - startingValidatedLedger; @@ -207,6 +216,16 @@ class MessageBoard { this.cfg.xrpl.regFeeHash = res.txHash; this.persistConfig(); console.log('Registration payment made for evernode account.'); + + // Set the encryption key to be used when sending encrypted redeem requirements (MessageKey account field). + console.log("Setting message key..."); + if (await this.xrplAcc.setMessageKey(this.accKeyPair.publicKey)) + console.log("Host account message key set."); + else + console.log("Failed to set host account message key."); + } + else { + console.log("Registration payment failed."); } } } @@ -225,8 +244,8 @@ class MessageBoard { async sendRedeemResponse(txHash, txPubkey, txAccount, response, encrypt = true) { // Verifying the pubkey. - if (!(await this.rippleAPI.isValidAddress(txPubkey, txAccount))) - throw 'Invalid public key for encryption'; + if (!(await this.rippleAPI.isValidKeyForAddress(txPubkey, txAccount))) + throw 'Invalid public key for redeem response encryption.'; // Encrypt response with user pubkey. if (encrypt) diff --git a/mb-xrpl/package-lock.json b/mb-xrpl/package-lock.json index 806c512..6aa16ac 100644 --- a/mb-xrpl/package-lock.json +++ b/mb-xrpl/package-lock.json @@ -9,9 +9,9 @@ "integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==" }, "@types/node": { - "version": "16.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", - "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==" + "version": "16.10.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.4.tgz", + "integrity": "sha512-EITwVTX5B4nDjXjGeQAfXOrm+Jn+qNjDmyDRtWoD+wZsl/RDPRTFRKivs4Mt74iOFlLOrE5+Kf+p5yjyhm3+cA==" }, "@types/ws": { "version": "7.4.7", @@ -176,9 +176,9 @@ } }, "big-integer": { - "version": "1.6.49", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz", - "integrity": "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw==" + "version": "1.6.50", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.50.tgz", + "integrity": "sha512-+O2uoQWFRo8ysZNo/rjtri2jIwjr3XfeAgRjAUADRqGG+ZITvyn8J1kvXLTaKVr3hhGXk+f23tKfdzmklVM9vQ==" }, "bignumber.js": { "version": "9.0.1", @@ -490,9 +490,9 @@ "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" }, "evernode-js-client": { - "version": "0.0.19-alpha", - "resolved": "https://registry.npmjs.org/evernode-js-client/-/evernode-js-client-0.0.19-alpha.tgz", - "integrity": "sha512-0ErIuURPkYdt3eOhy8RV2H5+OrLtcrWS0+ARhSadQvkM6svQRd4bsS9Scvp6gikRjcZ6qPPSDP1IUVTnJkFkSw==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/evernode-js-client/-/evernode-js-client-0.1.0.tgz", + "integrity": "sha512-ZFdHFzDZ7E5V7xl7UTab0ZXGd7nrWNgyDYHzND7fa6GgGD88hTVqlL+qX7pVY0oA7ZMubsiE4U6w1CwoY6T2lg==", "requires": { "eccrypto": "1.1.6", "ripple-lib": "1.9.8" diff --git a/mb-xrpl/package.json b/mb-xrpl/package.json index bc46c13..d104982 100644 --- a/mb-xrpl/package.json +++ b/mb-xrpl/package.json @@ -4,7 +4,7 @@ "build": "ncc build mb-xrpl.js -o dist" }, "dependencies": { - "evernode-js-client": "0.0.19-alpha", + "evernode-js-client": "0.1.0", "sqlite3": "5.0.2" } } diff --git a/test/vm-cluster/evcluster.js b/test/vm-cluster/evcluster.js index 4f486cf..cb99da9 100644 --- a/test/vm-cluster/evcluster.js +++ b/test/vm-cluster/evcluster.js @@ -2,6 +2,7 @@ import fetch from "node-fetch"; import { exec } from "child_process"; import fs from "fs"; import evernode from "evernode-js-client"; +import { exit } from "process"; const { EvernodeClient, XrplAccount, RippleAPIWrapper } = evernode; const REDEEM_AMOUNT = 18000; // 18000 Moments ~ 60days @@ -152,7 +153,7 @@ async function initHosts() { await Promise.all(hosts.map(host => initHostAccountData(host))) for (const host of hosts) { - const { ownsTokens, acc } = hostAccounts[host]; + const { ownsTokens, hostAccount: acc } = hostAccounts[host]; if (!ownsTokens) await transferHostingTokens(acc.token, acc.address, acc.secret); } @@ -250,6 +251,8 @@ async function main() { var args = process.argv.slice(2); process.on('SIGINT', () => { + if (shouldAbort) + exit(); console.log('Received SIGINT. Aborting...'); shouldAbort = true; }); diff --git a/test/vm-cluster/package-lock.json b/test/vm-cluster/package-lock.json index e2d22d4..10d9a59 100644 --- a/test/vm-cluster/package-lock.json +++ b/test/vm-cluster/package-lock.json @@ -9,9 +9,9 @@ "integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==" }, "@types/node": { - "version": "16.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", - "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==" + "version": "16.10.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.4.tgz", + "integrity": "sha512-EITwVTX5B4nDjXjGeQAfXOrm+Jn+qNjDmyDRtWoD+wZsl/RDPRTFRKivs4Mt74iOFlLOrE5+Kf+p5yjyhm3+cA==" }, "@types/ws": { "version": "7.4.7", @@ -64,9 +64,9 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "big-integer": { - "version": "1.6.49", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz", - "integrity": "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw==" + "version": "1.6.50", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.50.tgz", + "integrity": "sha512-+O2uoQWFRo8ysZNo/rjtri2jIwjr3XfeAgRjAUADRqGG+ZITvyn8J1kvXLTaKVr3hhGXk+f23tKfdzmklVM9vQ==" }, "bignumber.js": { "version": "9.0.1", @@ -285,9 +285,9 @@ "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" }, "evernode-js-client": { - "version": "0.0.19-alpha", - "resolved": "https://registry.npmjs.org/evernode-js-client/-/evernode-js-client-0.0.19-alpha.tgz", - "integrity": "sha512-0ErIuURPkYdt3eOhy8RV2H5+OrLtcrWS0+ARhSadQvkM6svQRd4bsS9Scvp6gikRjcZ6qPPSDP1IUVTnJkFkSw==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/evernode-js-client/-/evernode-js-client-0.1.0.tgz", + "integrity": "sha512-ZFdHFzDZ7E5V7xl7UTab0ZXGd7nrWNgyDYHzND7fa6GgGD88hTVqlL+qX7pVY0oA7ZMubsiE4U6w1CwoY6T2lg==", "requires": { "eccrypto": "1.1.6", "ripple-lib": "1.9.8" diff --git a/test/vm-cluster/package.json b/test/vm-cluster/package.json index f8b4d31..2eb0a20 100644 --- a/test/vm-cluster/package.json +++ b/test/vm-cluster/package.json @@ -2,7 +2,7 @@ "name": "evcluster", "type": "module", "dependencies": { - "evernode-js-client": "0.0.19-alpha", + "evernode-js-client": "0.1.0", "node-fetch": "3.0.0" } }