Here's how the layered encryption portion of the CashShuffle protocol rounds work like this.
Assuming 5 players: Alice, Bob, Carol, Dingus, Emily
TODO
[ | |
'28795101D3751FF726D7A76BE3C7D248F05640F5B21E699DDECBCC3584639B00', | |
'DEF403D3356FF0EF1491922FAA9AACE4037EC6690FFB473D2AFF679A3A1854A5', | |
'14505B963C357307B2DA1FD3CD9C55909091CAD976D3DBFCF4F71F00FE774B97', | |
'E2FD061B867708B2BEDEF2DDB2A3CB473E760A287447885533D0B94D272DE956', | |
'293431E74174541BA43EC2BFD0BE434F4B4426A13C4C090A280B10DD5A358B8D', | |
'A87D11444A6421E77BE937BAAA7708620DEE2E4A2CF44CC6360157CACE8A652A', | |
'786B8BE05506BE498668AB642C6CBF2B7607E0E22676746B1FBBC782C72F2A97', | |
'8762E16678F91937D3A064E3CF8E7FB09E4C60606E625D0A292B761E1C270451', | |
'786B8BE05506BE498668AB642C6CBF2B7607E0E22676746B1FBBC782C72F2A97', |
var good = {"errorMessage":null,"wasSuccess":1,"objectType":"BLOCK","object":{"difficulty":{"value":"18032B31","ratio":3.4698429935858E11,"mask":"0000000000000000032B31000000000000000000000000000000000000000000"},"reward":1250000000,"previousBlockHash":"000000000000000000B727132C210AA2EC9CCDCC9F17E8A4DDA4CDC7400ADD71","byteCount":265187,"merkleRoot":"822CAD80CEF338A8B551F9DA4657B6A43AE1C1F5511407E28E91FA0FBABD4F98","transactionCount":749,"transactions":[{"outputs":[{"amount":1261129423,"lockingScript":{"operations":["0x76 OP_DYNAMIC_VALUE-COPY_1ST","0xA9 OP_CRYPTOGRAPHIC-SHA_256_THEN_RIPEMD_160","0x14 OP_PUSH-PUSH_DATA Value: 6D5BDA2EE1B2AE0160C17D33F56218C7A1D37FCE","0x88 OP_COMPARISON-IS_EQUAL_THEN_VERIFY","0xAC OP_CRYPTOGRAPHIC-CHECK_SIGNATURE"],"bytes":"76A9146D5BDA2EE1B2AE0160C17D33F56218C7A1D37FCE88AC","scriptType":"PAY_TO_PUBLIC_KEY_HASH"},"address":"1AyEgvE2XNM65EkdisywrZZghHuMv1ngf8","index":0,"type":"PAY_TO_PUBLIC_KEY_HASH"}],"lockTime":{"date":null,"bytes":"00000000","type":"BLOCK_HEIGHT","value":0 |
Here's how the layered encryption portion of the CashShuffle protocol rounds work like this.
Assuming 5 players: Alice, Bob, Carol, Dingus, Emily
TODO
var NETWORK = `mainnet` | |
var _ = require('lodash'); | |
var BITBOXSDK = require('bitbox-sdk/lib/bitbox-sdk').default; | |
var BITBOX | |
if (NETWORK === `mainnet`) | |
BITBOX = new BITBOXSDK({ restURL: `https://rest.bitcoin.com/v2/` }) | |
else BITBOX = new BITBOXSDK({ restURL: `https://trest.bitcoin.com/v2/` }) |
// Fails on EC with error: | |
// 'Decoding error: AttributeError("'int' object has no attribute 'DESCRIPTOR'",) from sender bad' | |
// Just the payload as base64 | |
//"payload": "CtABCogBChZFbTFlcklpRUZ3RFJPRUtYVU9VdDVUEAMaRApCMDJmZDJiNzViYjgzNzkwY2Q1MGIzZmZkYzQ1OTRlNWZmZGZjODU3ZDgzOTZhOTg2MzFjOTQzMzFiMzdkYmNkZWMwKAIyJCoiMTltQnNGSFp4VzYxSGc3d0Q2ZXlXOWRHVTQ2S01rN0xuVRJDCkEf6OE1NuNmM/g3UGQpjHoF2tBByCGuF4ag9ICasRjsG4xVPVzluwtOJt0ne2g1UzxhCbeN0zxCCnqaxI09qXZ3nwrQAQqIAQoWRW0xZXJJaUVGd0RST0VLWFVPVXQ1VBADGkQKQjAyZmQyYjc1YmI4Mzc5MGNkNTBiM2ZmZGM0NTk0ZTVmZmRmYzg1N2Q4Mzk2YTk4NjMxYzk0MzMxYjM3ZGJjZGVjMCgCMiQqIjE1dmJ0c3prOTRYV2hrS0JidWJXdFF1djg1U2lpUnRiQnoSQwpBH3rIVQQBjW1JNE9732FbIP0UG/5OCwSJEpCPXF62TuuhIjPZL5hcmJFoce/qUJdYfYcmmtE65f8jQq7gF4bb9lcK0AEKiAEKFkVtMWVySWlFRndEUk9FS1hVT1V0NVQQAxpECkIwMmZkMmI3NWJiODM3OTBjZDUwYjNmZmRjNDU5NGU1ZmZkZmM4NTdkODM5NmE5ODYzMWM5NDMzMWIzN2RiY2RlYzAoAjIkKiIxNDNKckJzeW9DRHVoTkRmRjQ5dnI2YkF3YmQyNkQ1N25BEkMKQSBRUsXhuXzYlvX5piS7IY6Dok1ROT7faRKLfkuj3T6+MGihF0CXbf+w6Ld1LM6UUSlvGQ5u6Rx4k7HyFLn3wdgP", | |
// T |
const ShuffleClient = require('../cashshufflejs-web'); | |
const repl = require('repl'); | |
const shuffleIt = repl.start('cashshuffle > '); | |
shuffleIt.context.client = new ShuffleClient({ | |
coins: [{ | |
cashAddress: 'bitcoincash:qr7u5383gw5ckyls29mlpralgj23w4pgvc7rp7kphs', | |
privateKey: 'L4QLJkku7 ... fG1LGaXWaA', | |
txid: '544c6ea203b16ccad7aa61ab89fd7f9c5927a73046df78b67f0f0c7e78d39afd', | |
vout: 1, |
"packet": [ | |
{ | |
"packet": { | |
"session": "RXJYRnlxR1ZBSEF5VmhSWExGQWc2Vg==", | |
"number": 2 | |
} | |
} | |
] |
"incomingChangeAddress": [ | |
{ | |
"messageType": "incomingChangeAddress", | |
"time": 1553730739405, | |
"session": "bVMwWlN5MWZDU0s5Q1d5NWs2U3NYMg==", | |
"number": 1, | |
"key": "02dba36559fb0abdab17df42e807bd78ef8beb0d368a9e71b5b1cedce72a07feb1", | |
"phase": "ANNOUNCEMENT", | |
"address": "1Q7iQstJFHzco6geR79ZzCnLs6FWjrEWKG", | |
"signature": "INWuh7vjmpWJ9wFpVZ5n1x5RfvRy1NcB2lTFAEXl3s0oPyrkaHiEKyIQ4In3K7by/noShl9jzI7JqxeH8wakaHc=", |
This one doesnt (232 character opreturn) | |
raw transaction hex | |
``` | |
0100000001f77e0fc7f33347f849ea35825e97e98afde50f7c8825ce7908fab9e3d7e5069a020000006a47304402202d589b2184c8d6d09ad24f5896a799136c495c5535312a7e87a4d6acafe9987d02205fe712f2b428d748e16e606574dba4bee65494c7391314c7f8b60009a57cc8184121037da288d695e09b8f5ecc7041a2d33e7886dd630209a50ce8d24d9200175aaa20ffffffff03a9850200000000001976a914bbe69f1a9130f6082cc92e2762e1442665181af888ac0000000000000000e86a4ce57464633a3a6430313235666135343635366563373436393333346535376364663863366261313530633264626263613136313663353061303932363064363935613762316633386261633365363561613432356433316235656161313166663863323961373938323966386533373231346639303137343132383763316266666261633063363861306664383934653438633930363465353162626132396465666138366335333136363837343332383538326461326235656563383131356163353262346461653466626461396261353134353464313930346238343963643537303065c2c83300000000001976a914c4cc51b02183838f8a22e02cf5041dff9be3b80588ac00000000 | |
``` | |
as json | |
``` | |
{ |
<!-- Fetch the library from the server --> | |
<script src="https://tipscash.herokuapp.com/libs/telescope/tips.cash.js"></script> | |
<script language="javascript"> | |
// Setup all your event listeners | |
io.socket.on('account', function(account) { | |
console.log('account!', account); |