letbtx1=yieldtocB.prepareUTX(btx0,['SIG(0)'],[{qty:120,base:0,lock:'(XHX(8AFC8DF633FC158F9DB4864ABED696C1AA0FE5D617A7B5F7AB8DE7CA2EFCD4CB) && SIG('+ticB.pub+')) || (SIG('+tocB.pub+') && SIG('+ticB.pub+'))'}],{comment:'BETA toc to tic',blockstamp:blockstampB});
// 2. toc makes a rollback transaction from tx1, signed by both parties (through internet): toc and tic
letbtx2=yieldtocB.prepareMTX(btx1,ticB,['XHX(0) SIG(1) SIG(0) SIG(1)'],[{qty:120,base:0,lock:'SIG('+tocB.pub+')'}],{comment:'money back to tocB in 48h',locktime:0,blockstamp:blockstampB});// N.B.: locktime should be like 48h in real world
letbtx2=yieldtocB.prepareMTX(btx1,ticB,['XHX(0) SIG(1) SIG(0) SIG(1)'],[{qty:120,base:0,lock:'SIG('+tocB.pub+')'}],{comment:'money back to tocB in 48h',locktime:3600*48,blockstamp:blockstampB});// N.B.: locktime should be like 48h in real world
// TICM side (META)
// 3. tic generates a transaction based on H(X) given by toc (through internet)
letmtx3=yieldticM.prepareUTX(mtx0,['SIG(0)'],[{qty:120,base:0,lock:'(XHX(8AFC8DF633FC158F9DB4864ABED696C1AA0FE5D617A7B5F7AB8DE7CA2EFCD4CB) && SIG('+tocM.pub+')) || (SIG('+ticM.pub+') && SIG('+tocM.pub+'))'}],{comment:'META tic to toc',blockstamp:blockstampM});
// 4. tic makes a rollback transaction from tx1, signed by both parties: toc and tic
letmtx4=yieldticM.prepareMTX(mtx3,tocM,['XHX(0) SIG(1) SIG(0) SIG(1)'],[{qty:120,base:0,lock:'SIG('+tocB.pub+')'}],{comment:'money back to tocB',locktime:0,blockstamp:blockstampM});// N.B.: locktime should be like 24h in real world
letmtx4=yieldticM.prepareMTX(mtx3,tocM,['XHX(0) SIG(1) SIG(0) SIG(1)'],[{qty:120,base:0,lock:'SIG('+tocB.pub+')'}],{comment:'money back to tocB',locktime:3600*24,blockstamp:blockstampM});// N.B.: locktime should be like 24h in real world
// We submit TX1 to the network & write it
yieldtocB.sendTX(btx1);
// Written
yieldcommit(sB)();
yieldcommit(sB)({time:now+10});
// We submit TX3 to the network & write it
yieldticM.sendTX(mtx3);
// Written
yieldcommit(sM)();
yieldcommit(sM)({time:now+10});
/**
* So now ... parties can either COMMIT or ROLLBACK. It's UP to the initiator: TOC.
*
*/
/**
* Note: the ROLLBACK transactions have a locktime, and cannot be used before that delay.
*/
yieldunit.shouldFail(ticM.sendTX(mtx4),'Locktime not elapsed yet');
yieldunit.shouldFail(tocB.sendTX(btx2),'Locktime not elapsed yet');
letbtx1=yieldtocB.prepareUTX(btx0,['SIG(0)'],[{qty:120,base:0,lock:'(XHX(8AFC8DF633FC158F9DB4864ABED696C1AA0FE5D617A7B5F7AB8DE7CA2EFCD4CB) && SIG('+ticB.pub+')) || (SIG('+tocB.pub+') && SIG('+ticB.pub+'))'}],{comment:'BETA toc to tic',blockstamp:blockstampB});
// 2. toc makes a rollback transaction from tx1, signed by both parties (through internet): toc and tic
letbtx2=yieldtocB.prepareMTX(btx1,ticB,['XHX(0) SIG(1) SIG(0) SIG(1)'],[{qty:120,base:0,lock:'SIG('+tocB.pub+')'}],{comment:'money back to tocB in 48h',locktime:0,blockstamp:blockstampB});// N.B.: locktime should be like 48h in real world
letbtx2=yieldtocB.prepareMTX(btx1,ticB,['XHX(0) SIG(1) SIG(0) SIG(1)'],[{qty:120,base:0,lock:'SIG('+tocB.pub+')'}],{comment:'money back to tocB in 48h',locktime:3,blockstamp:blockstampB});// N.B.: locktime should be like 48h in real world
// TICM side (META)
// 3. tic generates a transaction based on H(X) given by toc (through internet)
letmtx3=yieldticM.prepareUTX(mtx0,['SIG(0)'],[{qty:120,base:0,lock:'(XHX(8AFC8DF633FC158F9DB4864ABED696C1AA0FE5D617A7B5F7AB8DE7CA2EFCD4CB) && SIG('+tocM.pub+')) || (SIG('+ticM.pub+') && SIG('+tocM.pub+'))'}],{comment:'META tic to toc',blockstamp:blockstampM});
// 4. tic makes a rollback transaction from tx1, signed by both parties: toc and tic
letmtx4=yieldticM.prepareMTX(mtx3,tocM,['XHX(0) SIG(1) SIG(0) SIG(1)'],[{qty:120,base:0,lock:'SIG('+ticM.pub+')'}],{comment:'money back to ticM',locktime:0,blockstamp:blockstampM});// N.B.: locktime should be like 24h in real world
letmtx4=yieldticM.prepareMTX(mtx3,tocM,['XHX(0) SIG(1) SIG(0) SIG(1)'],[{qty:120,base:0,lock:'SIG('+ticM.pub+')'}],{comment:'money back to ticM',locktime:2,blockstamp:blockstampM});// N.B.: locktime should be like 24h in real world
// We submit TX1 to the network & write it
yieldtocB.sendTX(btx1);
// Written
yieldcommit(sB)();
yieldcommit(sB)({time:now+12});
// We submit TX3 to the network & write it
yieldticM.sendTX(mtx3);
// Written
yieldcommit(sM)();
yieldcommit(sM)({time:now+12});
/**
* So now ... parties can either COMMIT or ROLLBACK. It's UP to the initiator: TOC.