Best JavaScript code snippet using playwright-internal
callback.js
Source:callback.js  
...101						constants.NULL.BYTES32,102						"0x",103						{ from: appProvider.address }104					);105					events = tools.extractEvents(txMined, AppRegistryInstance.address, "Transfer");106					AppInstance = await App.at(tools.BN2Address(events[0].args.tokenId));107				});108			});109			describe("dataset", async () => {110				it("create", async () => {111					txMined = await DatasetRegistryInstance.createDataset(112						datasetProvider.address,113						"Pi",114						constants.MULTIADDR_BYTES,115						constants.NULL.BYTES32,116						{ from: datasetProvider.address }117					);118					events = tools.extractEvents(txMined, DatasetRegistryInstance.address, "Transfer");119					DatasetInstance = await Dataset.at(tools.BN2Address(events[0].args.tokenId));120				});121			});122			describe("workerpool", async () => {123				it("create", async () => {124					txMined = await WorkerpoolRegistryInstance.createWorkerpool(125						scheduler.address,126						"A test workerpool",127						{ from: scheduler.address }128					);129					events = tools.extractEvents(txMined, WorkerpoolRegistryInstance.address, "Transfer");130					WorkerpoolInstance = await Workerpool.at(tools.BN2Address(events[0].args.tokenId));131				});132				it("change policy", async () => {133					await WorkerpoolInstance.changePolicy(/* worker stake ratio */ 35, /* scheduler reward ratio */ 5, { from: scheduler.address });134				});135			});136		});137		describe("tokens", async () => {138			it("balances before", async () => {139				assert.deepEqual(await appProvider.viewAccount(),     [ 0, 0 ], "check balance");140				assert.deepEqual(await datasetProvider.viewAccount(), [ 0, 0 ], "check balance");141				assert.deepEqual(await scheduler.viewAccount(),       [ 0, 0 ], "check balance");142				assert.deepEqual(await worker1.viewAccount(),         [ 0, 0 ], "check balance");143				assert.deepEqual(await worker2.viewAccount(),         [ 0, 0 ], "check balance");144				assert.deepEqual(await worker3.viewAccount(),         [ 0, 0 ], "check balance");145				assert.deepEqual(await worker4.viewAccount(),         [ 0, 0 ], "check balance");146				assert.deepEqual(await worker5.viewAccount(),         [ 0, 0 ], "check balance");147				assert.deepEqual(await user.viewAccount(),            [ 0, 0 ], "check balance");148			});149			it("deposit", async () => {150				switch (DEPLOYMENT.asset)151				{152					case "Native":153						txMined = await IexecInstance.deposit({ from: iexecAdmin.address, value: 10000000 * 10 ** 9 });154						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.from,    constants.NULL.ADDRESS);155						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.to,      iexecAdmin.address);156						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.value,   10000000);157						break;158					case "Token":159						txMined = await RLCInstance.approveAndCall(IexecInstance.address, 10000000, "0x", { from: iexecAdmin.address });160						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.owner,   iexecAdmin.address);161						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.spender, IexecInstance.address);162						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.value,   10000000);163						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.from,    iexecAdmin.address);164						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.to,      IexecInstance.address);165						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.value,   10000000);166						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.from,    constants.NULL.ADDRESS);167						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.to,      iexecAdmin.address);168						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.value,   10000000);169						break;170				}171				txsMined = await Promise.all([172					IexecInstance.transfer(scheduler.address, 1000, { from: iexecAdmin.address }),173					IexecInstance.transfer(worker1.address,   1000, { from: iexecAdmin.address }),174					IexecInstance.transfer(worker2.address,   1000, { from: iexecAdmin.address }),175					IexecInstance.transfer(worker3.address,   1000, { from: iexecAdmin.address }),176					IexecInstance.transfer(worker4.address,   1000, { from: iexecAdmin.address }),177					IexecInstance.transfer(worker5.address,   1000, { from: iexecAdmin.address }),178					IexecInstance.transfer(user.address,      1000, { from: iexecAdmin.address }),179				]);180				assert.equal(tools.extractEvents(txsMined[0], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);181				assert.equal(tools.extractEvents(txsMined[0], IexecInstance.address, "Transfer")[0].args.value, 1000);182				assert.equal(tools.extractEvents(txsMined[1], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);183				assert.equal(tools.extractEvents(txsMined[1], IexecInstance.address, "Transfer")[0].args.value, 1000);184				assert.equal(tools.extractEvents(txsMined[2], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);185				assert.equal(tools.extractEvents(txsMined[2], IexecInstance.address, "Transfer")[0].args.value, 1000);186				assert.equal(tools.extractEvents(txsMined[3], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);187				assert.equal(tools.extractEvents(txsMined[3], IexecInstance.address, "Transfer")[0].args.value, 1000);188				assert.equal(tools.extractEvents(txsMined[4], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);189				assert.equal(tools.extractEvents(txsMined[4], IexecInstance.address, "Transfer")[0].args.value, 1000);190				assert.equal(tools.extractEvents(txsMined[5], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);191				assert.equal(tools.extractEvents(txsMined[5], IexecInstance.address, "Transfer")[0].args.value, 1000);192				assert.equal(tools.extractEvents(txsMined[6], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);193				assert.equal(tools.extractEvents(txsMined[6], IexecInstance.address, "Transfer")[0].args.value, 1000);194			});195			it("balances after", async () => {196				assert.deepEqual(await appProvider.viewAccount(),     [    0, 0 ], "check balance");197				assert.deepEqual(await datasetProvider.viewAccount(), [    0, 0 ], "check balance");198				assert.deepEqual(await scheduler.viewAccount(),       [ 1000, 0 ], "check balance");199				assert.deepEqual(await worker1.viewAccount(),         [ 1000, 0 ], "check balance");200				assert.deepEqual(await worker2.viewAccount(),         [ 1000, 0 ], "check balance");201				assert.deepEqual(await worker3.viewAccount(),         [ 1000, 0 ], "check balance");202				assert.deepEqual(await worker4.viewAccount(),         [ 1000, 0 ], "check balance");203				assert.deepEqual(await worker5.viewAccount(),         [ 1000, 0 ], "check balance");204				assert.deepEqual(await user.viewAccount(),            [ 1000, 0 ], "check balance");205			});206		});207		it("score", async () => {208			assert.equal(await worker1.viewScore(), 0, "score issue");209			assert.equal(await worker2.viewScore(), 0, "score issue");210			assert.equal(await worker3.viewScore(), 0, "score issue");211			assert.equal(await worker4.viewScore(), 0, "score issue");212			assert.equal(await worker5.viewScore(), 0, "score issue");213		});214	});215	describe("â pipeline", async () => {216		describe("[0] orders", async () => {217			describe("app", async () => {218				it("sign", async () => {219					apporder = await appProvider.signAppOrder({220						app:                AppInstance.address,221						appprice:           3,222						volume:             1000,223						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",224						datasetrestrict:    constants.NULL.ADDRESS,225						workerpoolrestrict: constants.NULL.ADDRESS,226						requesterrestrict:  constants.NULL.ADDRESS,227						salt:               web3.utils.randomHex(32),228						sign:               constants.NULL.SIGNATURE,229					});230				});231				it("verify", async () => {232					assert.isTrue(await IexecInstance.verifySignature(233						appProvider.address,234						odbtools.utils.hashAppOrder(ERC712_domain, apporder),235						apporder.sign236					));237				});238			});239			describe("dataset", async () => {240				it("sign", async () => {241					datasetorder = await datasetProvider.signDatasetOrder({242						dataset:            DatasetInstance.address,243						datasetprice:       0,244						volume:             1000,245						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",246						apprestrict:        constants.NULL.ADDRESS,247						workerpoolrestrict: constants.NULL.ADDRESS,248						requesterrestrict:  constants.NULL.ADDRESS,249						salt:               web3.utils.randomHex(32),250						sign:               constants.NULL.SIGNATURE,251					});252				});253				it("verify", async () => {254					assert.isTrue(await IexecInstance.verifySignature(255						datasetProvider.address,256						odbtools.utils.hashDatasetOrder(ERC712_domain, datasetorder),257						datasetorder.sign258					));259				});260			});261			describe("workerpool", async () => {262				it("sign", async () => {263					workerpoolorder = await scheduler.signWorkerpoolOrder({264						workerpool:        WorkerpoolInstance.address,265						workerpoolprice:   25,266						volume:            1000,267						category:          4,268						trust:             0,269						tag:               "0x0000000000000000000000000000000000000000000000000000000000000000",270						apprestrict:       constants.NULL.ADDRESS,271						datasetrestrict:   constants.NULL.ADDRESS,272						requesterrestrict: constants.NULL.ADDRESS,273						salt:              web3.utils.randomHex(32),274						sign:              constants.NULL.SIGNATURE,275					});276				});277				it("verify", async () => {278					assert.isTrue(await IexecInstance.verifySignature(279						scheduler.address,280						odbtools.utils.hashWorkerpoolOrder(ERC712_domain, workerpoolorder),281						workerpoolorder.sign282					));283				});284			});285			describe("request", async () => {286				describe("no callback", async () => {287					it("sign", async () => {288						requestorder1 = await user.signRequestOrder({289							app:                AppInstance.address,290							appmaxprice:        3,291							dataset:            DatasetInstance.address,292							datasetmaxprice:    0,293							workerpool:         constants.NULL.ADDRESS,294							workerpoolmaxprice: 25,295							volume:             1,296							tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",297							category:           4,298							trust:              0,299							requester:          user.address,300							beneficiary:        user.address,301							callback:           constants.NULL.ADDRESS,302							params:             "<parameters>",303							salt:               web3.utils.randomHex(32),304							sign:               constants.NULL.SIGNATURE,305						});306					});307					it("verify", async () => {308						assert.isTrue(await IexecInstance.verifySignature(309							user.address,310							odbtools.utils.hashRequestOrder(ERC712_domain, requestorder1),311							requestorder1.sign312						));313					});314				});315				describe("invalid callback", async () => {316					it("sign", async () => {317						requestorder2 = await user.signRequestOrder({318							app:                AppInstance.address,319							appmaxprice:        3,320							dataset:            DatasetInstance.address,321							datasetmaxprice:    0,322							workerpool:         constants.NULL.ADDRESS,323							workerpoolmaxprice: 25,324							volume:             1,325							tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",326							category:           4,327							trust:              0,328							requester:          user.address,329							beneficiary:        user.address,330							callback:           AppInstance.address,331							params:             "<parameters>",332							salt:               web3.utils.randomHex(32),333							sign:               constants.NULL.SIGNATURE,334						});335					});336					it("verify", async () => {337						assert.isTrue(await IexecInstance.verifySignature(338							user.address,339							odbtools.utils.hashRequestOrder(ERC712_domain, requestorder2),340							requestorder2.sign341						));342					});343				});344				describe("valid callback", async () => {345					it("sign", async () => {346						requestorder3 = await user.signRequestOrder({347							app:                AppInstance.address,348							appmaxprice:        3,349							dataset:            DatasetInstance.address,350							datasetmaxprice:    0,351							workerpool:         constants.NULL.ADDRESS,352							workerpoolmaxprice: 25,353							volume:             1,354							tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",355							category:           4,356							trust:              0,357							requester:          user.address,358							beneficiary:        user.address,359							callback:           TestClientInstance.address,360							params:             "<parameters>",361							salt:               web3.utils.randomHex(32),362							sign:               constants.NULL.SIGNATURE,363						});364					});365					it("verify", async () => {366						assert.isTrue(await IexecInstance.verifySignature(367							user.address,368							odbtools.utils.hashRequestOrder(ERC712_domain, requestorder3),369							requestorder3.sign370						));371					});372				});373				describe("callback EOA", async () => {374					it("sign", async () => {375						requestorder4 = await user.signRequestOrder({376							app:                AppInstance.address,377							appmaxprice:        3,378							dataset:            DatasetInstance.address,379							datasetmaxprice:    0,380							workerpool:         constants.NULL.ADDRESS,381							workerpoolmaxprice: 25,382							volume:             1,383							tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",384							category:           4,385							trust:              0,386							requester:          user.address,387							beneficiary:        user.address,388							callback:           "0x0000000000000000000000000000000000000001",389							params:             "<parameters>",390							salt:               web3.utils.randomHex(32),391							sign:               constants.NULL.SIGNATURE,392						});393					});394					it("verify", async () => {395						assert.isTrue(await IexecInstance.verifySignature(396							user.address,397							odbtools.utils.hashRequestOrder(ERC712_domain, requestorder4),398							requestorder4.sign399						));400					});401				});402			});403		});404		describe("[1] order matching", async () => {405			it("[TX] match", async () => {406				txsMined = await Promise.all([407					IexecInstance.matchOrders(apporder, datasetorder, workerpoolorder, requestorder1, { from: user.address }),408					IexecInstance.matchOrders(apporder, datasetorder, workerpoolorder, requestorder2, { from: user.address }),409					IexecInstance.matchOrders(apporder, datasetorder, workerpoolorder, requestorder3, { from: user.address }),410					IexecInstance.matchOrders(apporder, datasetorder, workerpoolorder, requestorder4, { from: user.address }),411				]);412				deals[1] = tools.extractEvents(txsMined[0], IexecInstance.address, "OrdersMatched")[0].args.dealid;413				deals[2] = tools.extractEvents(txsMined[1], IexecInstance.address, "OrdersMatched")[0].args.dealid;414				deals[3] = tools.extractEvents(txsMined[2], IexecInstance.address, "OrdersMatched")[0].args.dealid;415				deals[4] = tools.extractEvents(txsMined[3], IexecInstance.address, "OrdersMatched")[0].args.dealid;416			});417		});418		describe("[2] initialization", async () => {419			it("[TX] initialize", async () => {420				txsMined = await Promise.all([421					IexecInstance.initialize(deals[1], 0, { from: scheduler.address }),422					IexecInstance.initialize(deals[2], 0, { from: scheduler.address }),423					IexecInstance.initialize(deals[3], 0, { from: scheduler.address }),424					IexecInstance.initialize(deals[4], 0, { from: scheduler.address }),425				]);426				tasks[1] = tools.extractEvents(txsMined[0], IexecInstance.address, "TaskInitialize")[0].args.taskid;427				tasks[2] = tools.extractEvents(txsMined[1], IexecInstance.address, "TaskInitialize")[0].args.taskid;428				tasks[3] = tools.extractEvents(txsMined[2], IexecInstance.address, "TaskInitialize")[0].args.taskid;429				tasks[4] = tools.extractEvents(txsMined[3], IexecInstance.address, "TaskInitialize")[0].args.taskid;430			});431		});432		async function sendContribution(worker, taskid, result, useenclave = true, callback)433		{434			const preauth          = await scheduler.signPreAuthorization(taskid, worker.address);435			const [ auth, secret ] = useenclave ? await broker.signAuthorization(preauth) : [ preauth, null ];436			const results          = await worker.run(auth, secret, result, callback);437			return IexecInstance.contribute(438				auth.taskid,  // task (authorization)439				results.hash, // common    (result)440				results.seal, // unique    (result)441				auth.enclave, // address   (enclave)442				results.sign, // signature (enclave)443				auth.sign,    // signature (authorization)444				{ from: worker.address }445			);446		}447		describe("[3] contribute", async () => {448			it("[TX] contribute", async () => {449				await sendContribution(worker1, tasks[1], "aResult 1", false, web3.utils.utf8ToHex("callback-1"));450				await sendContribution(worker1, tasks[2], "aResult 2", false, web3.utils.utf8ToHex("callback-2"));451				await sendContribution(worker1, tasks[3], "aResult 3", false, web3.utils.utf8ToHex("callback-3"));452				await sendContribution(worker1, tasks[4], "aResult 4", false, web3.utils.utf8ToHex("callback-4"));453			});454		});455		describe("[4] reveal", async () => {456			it("[TX] reveal", async () => {457				await IexecInstance.reveal(tasks[1], odbtools.utils.hashByteResult(tasks[1], web3.utils.soliditySha3({t: 'bytes', v: web3.utils.utf8ToHex("callback-1") })).digest, { from: worker1.address });458				await IexecInstance.reveal(tasks[2], odbtools.utils.hashByteResult(tasks[2], web3.utils.soliditySha3({t: 'bytes', v: web3.utils.utf8ToHex("callback-2") })).digest, { from: worker1.address });459				await IexecInstance.reveal(tasks[3], odbtools.utils.hashByteResult(tasks[3], web3.utils.soliditySha3({t: 'bytes', v: web3.utils.utf8ToHex("callback-3") })).digest, { from: worker1.address });460				await IexecInstance.reveal(tasks[4], odbtools.utils.hashByteResult(tasks[4], web3.utils.soliditySha3({t: 'bytes', v: web3.utils.utf8ToHex("callback-4") })).digest, { from: worker1.address });461			});462		});463		describe("[5] finalization", async () => {464			describe("bad callback", async () => {465				it("[TX] no call", async () => {466					await expectRevert.unspecified(IexecInstance.finalize(467						tasks[1],468						web3.utils.utf8ToHex("aResult 1"),469						web3.utils.utf8ToHex("wrong-callback"),470						{ from: scheduler.address }471					));472				});473			});474			describe("no callback", async () => {475				it("[TX] no call", async () => {476					txMined = await IexecInstance.finalize(477						tasks[1],478						web3.utils.utf8ToHex("aResult 1"),479						web3.utils.utf8ToHex("callback-1"),480						{ from: scheduler.address }481					);482					events = tools.extractEvents(txMined, IexecInstance.address, "TaskFinalize");483					assert.equal(events[0].args.taskid,  tasks[1],                          "check taskid");484					assert.equal(events[0].args.results, web3.utils.utf8ToHex("aResult 1"), "check consensus (results)");485				});486			});487			describe("invalid callback", async () => {488				it("[TX] doesn't revert", async () => {489					txMined = await IexecInstance.finalize(490						tasks[2],491						web3.utils.utf8ToHex("aResult 2"),492						web3.utils.utf8ToHex("callback-2"),493						{ from: scheduler.address }494					);495					events = tools.extractEvents(txMined, IexecInstance.address, "TaskFinalize");496					assert.equal(events[0].args.taskid,  tasks[2],                          "check taskid");497					assert.equal(events[0].args.results, web3.utils.utf8ToHex("aResult 2"), "check consensus (results)");498				});499			});500			describe("valid callback", async () => {501				it("[TX] call", async () => {502					assert.equal(await TestClientInstance.store(tasks[3]), null, "Error in test client: store empty");503					txMined = await IexecInstance.finalize(504						tasks[3],505						web3.utils.utf8ToHex("aResult 3"),506						web3.utils.utf8ToHex("callback-3"),507						{ from: scheduler.address }508					);509					events = tools.extractEvents(txMined, IexecInstance.address, "TaskFinalize");510					assert.equal(events[0].args.taskid,  tasks[3],                          "check taskid");511					assert.equal(events[0].args.results, web3.utils.utf8ToHex("aResult 3"), "check consensus (results)");512				});513				it("check", async () => {514					assert.equal(await TestClientInstance.store(tasks[3]), web3.utils.utf8ToHex("callback-3"), "Error in test client: dataset not stored");515					// fails under coverage because of additional cost for instrumentation516					// assert.equal(await TestClientInstance.gstore(tasks[3]), await IexecInstance.callbackgas()-343);517				});518			});519			describe("callback EOA", async () => {520				it("[TX] doesn't revert", async () => {521					txMined = await IexecInstance.finalize(522						tasks[4],523						web3.utils.utf8ToHex("aResult 4"),524						web3.utils.utf8ToHex("callback-4"),525						{ from: scheduler.address }526					);527					events = tools.extractEvents(txMined, IexecInstance.address, "TaskFinalize");528					assert.equal(events[0].args.taskid,  tasks[4],                          "check taskid");529					assert.equal(events[0].args.results, web3.utils.utf8ToHex("aResult 4"), "check consensus (results)");530				});531			});532		});533	});...100_fullchain-5workers-1error.js
Source:100_fullchain-5workers-1error.js  
...111						constants.NULL.BYTES32,112						"0x",113						{ from: appProvider.address }114					);115					events = tools.extractEvents(txMined, AppRegistryInstance.address, "Transfer");116					AppInstance = await App.at(tools.BN2Address(events[0].args.tokenId));117				});118			});119			describe("dataset", async () => {120				it("create", async () => {121					txMined = await DatasetRegistryInstance.createDataset(122						datasetProvider.address,123						"Pi",124						constants.MULTIADDR_BYTES,125						constants.NULL.BYTES32,126						{ from: datasetProvider.address }127					);128					events = tools.extractEvents(txMined, DatasetRegistryInstance.address, "Transfer");129					DatasetInstance = await Dataset.at(tools.BN2Address(events[0].args.tokenId));130				});131			});132			describe("workerpool", async () => {133				it("create", async () => {134					txMined = await WorkerpoolRegistryInstance.createWorkerpool(135						scheduler.address,136						"A test workerpool",137						{ from: scheduler.address }138					);139					events = tools.extractEvents(txMined, WorkerpoolRegistryInstance.address, "Transfer");140					WorkerpoolInstance = await Workerpool.at(tools.BN2Address(events[0].args.tokenId));141				});142				it("change policy", async () => {143					txMined = await WorkerpoolInstance.changePolicy(/* worker stake ratio */ 35, /* scheduler reward ratio */ 5, { from: scheduler.address });144					events = tools.extractEvents(txMined, WorkerpoolInstance.address, "PolicyUpdate");145					assert.equal(events[0].args.oldWorkerStakeRatioPolicy,     30);146					assert.equal(events[0].args.newWorkerStakeRatioPolicy,     35);147					assert.equal(events[0].args.oldSchedulerRewardRatioPolicy,  1);148					assert.equal(events[0].args.newSchedulerRewardRatioPolicy,  5);149				});150			});151		});152		describe("tokens", async () => {153			it("balances before", async () => {154				assert.deepEqual(await appProvider.viewAccount(),     [ 0, 0 ], "check balance");155				assert.deepEqual(await datasetProvider.viewAccount(), [ 0, 0 ], "check balance");156				assert.deepEqual(await scheduler.viewAccount(),       [ 0, 0 ], "check balance");157				assert.deepEqual(await worker1.viewAccount(),         [ 0, 0 ], "check balance");158				assert.deepEqual(await worker2.viewAccount(),         [ 0, 0 ], "check balance");159				assert.deepEqual(await worker3.viewAccount(),         [ 0, 0 ], "check balance");160				assert.deepEqual(await worker4.viewAccount(),         [ 0, 0 ], "check balance");161				assert.deepEqual(await worker5.viewAccount(),         [ 0, 0 ], "check balance");162				assert.deepEqual(await user.viewAccount(),            [ 0, 0 ], "check balance");163			});164			it("deposit", async () => {165				switch (DEPLOYMENT.asset)166				{167					case "Native":168						txMined = await IexecInstance.deposit({ from: iexecAdmin.address, value: 10000000 * 10 ** 9 });169						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.from,    constants.NULL.ADDRESS);170						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.to,      iexecAdmin.address);171						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.value,   10000000);172						break;173					case "Token":174						txMined = await RLCInstance.approveAndCall(IexecInstance.address, 10000000, "0x", { from: iexecAdmin.address });175						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.owner,   iexecAdmin.address);176						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.spender, IexecInstance.address);177						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.value,   10000000);178						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.from,    iexecAdmin.address);179						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.to,      IexecInstance.address);180						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.value,   10000000);181						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.from,    constants.NULL.ADDRESS);182						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.to,      iexecAdmin.address);183						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.value,   10000000);184						break;185				}186				txsMined = await Promise.all([187					IexecInstance.transfer(scheduler.address, 1000, { from: iexecAdmin.address }),188					IexecInstance.transfer(worker1.address,   1000, { from: iexecAdmin.address }),189					IexecInstance.transfer(worker2.address,   1000, { from: iexecAdmin.address }),190					IexecInstance.transfer(worker3.address,   1000, { from: iexecAdmin.address }),191					IexecInstance.transfer(worker4.address,   1000, { from: iexecAdmin.address }),192					IexecInstance.transfer(worker5.address,   1000, { from: iexecAdmin.address }),193					IexecInstance.transfer(user.address,      1000, { from: iexecAdmin.address }),194				]);195				assert.equal(tools.extractEvents(txsMined[0], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);196				assert.equal(tools.extractEvents(txsMined[0], IexecInstance.address, "Transfer")[0].args.value, 1000);197				assert.equal(tools.extractEvents(txsMined[1], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);198				assert.equal(tools.extractEvents(txsMined[1], IexecInstance.address, "Transfer")[0].args.value, 1000);199				assert.equal(tools.extractEvents(txsMined[2], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);200				assert.equal(tools.extractEvents(txsMined[2], IexecInstance.address, "Transfer")[0].args.value, 1000);201				assert.equal(tools.extractEvents(txsMined[3], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);202				assert.equal(tools.extractEvents(txsMined[3], IexecInstance.address, "Transfer")[0].args.value, 1000);203				assert.equal(tools.extractEvents(txsMined[4], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);204				assert.equal(tools.extractEvents(txsMined[4], IexecInstance.address, "Transfer")[0].args.value, 1000);205				assert.equal(tools.extractEvents(txsMined[5], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);206				assert.equal(tools.extractEvents(txsMined[5], IexecInstance.address, "Transfer")[0].args.value, 1000);207				assert.equal(tools.extractEvents(txsMined[6], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);208				assert.equal(tools.extractEvents(txsMined[6], IexecInstance.address, "Transfer")[0].args.value, 1000);209			});210			it("balances after", async () => {211				assert.deepEqual(await appProvider.viewAccount(),     [    0, 0 ], "check balance");212				assert.deepEqual(await datasetProvider.viewAccount(), [    0, 0 ], "check balance");213				assert.deepEqual(await scheduler.viewAccount(),       [ 1000, 0 ], "check balance");214				assert.deepEqual(await worker1.viewAccount(),         [ 1000, 0 ], "check balance");215				assert.deepEqual(await worker2.viewAccount(),         [ 1000, 0 ], "check balance");216				assert.deepEqual(await worker3.viewAccount(),         [ 1000, 0 ], "check balance");217				assert.deepEqual(await worker4.viewAccount(),         [ 1000, 0 ], "check balance");218				assert.deepEqual(await worker5.viewAccount(),         [ 1000, 0 ], "check balance");219				assert.deepEqual(await user.viewAccount(),            [ 1000, 0 ], "check balance");220			});221		});222		it("score", async () => {223			assert.equal(await worker1.viewScore(), 0, "score issue");224			assert.equal(await worker2.viewScore(), 0, "score issue");225			assert.equal(await worker3.viewScore(), 0, "score issue");226			assert.equal(await worker4.viewScore(), 0, "score issue");227			assert.equal(await worker5.viewScore(), 0, "score issue");228		});229	});230	describe("â pipeline", async () => {231		describe("[0] orders", async () => {232			describe("app", async () => {233				it("sign", async () => {234					apporder = await appProvider.signAppOrder({235						app:                AppInstance.address,236						appprice:           3,237						volume:             1000,238						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",239						datasetrestrict:    constants.NULL.ADDRESS,240						workerpoolrestrict: constants.NULL.ADDRESS,241						requesterrestrict:  constants.NULL.ADDRESS,242						salt:               web3.utils.randomHex(32),243						sign:               constants.NULL.SIGNATURE,244					});245				});246				it("verify", async () => {247					assert.isTrue(await IexecInstance.verifySignature(248						appProvider.address,249						odbtools.utils.hashAppOrder(ERC712_domain, apporder),250						apporder.sign251					));252				});253			});254			describe("dataset", async () => {255				it("sign", async () => {256					datasetorder = await datasetProvider.signDatasetOrder({257						dataset:            DatasetInstance.address,258						datasetprice:       1,259						volume:             1000,260						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",261						apprestrict:        constants.NULL.ADDRESS,262						workerpoolrestrict: constants.NULL.ADDRESS,263						requesterrestrict:  constants.NULL.ADDRESS,264						salt:               web3.utils.randomHex(32),265						sign:               constants.NULL.SIGNATURE,266					});267				});268				it("verify", async () => {269					assert.isTrue(await IexecInstance.verifySignature(270						datasetProvider.address,271						odbtools.utils.hashDatasetOrder(ERC712_domain, datasetorder),272						datasetorder.sign273					));274				});275			});276			describe("workerpool", async () => {277				it("sign", async () => {278					workerpoolorder = await scheduler.signWorkerpoolOrder({279						workerpool:        WorkerpoolInstance.address,280						workerpoolprice:   25,281						volume:            3,282						category:          4,283						trust:             trusttarget,284						tag:               "0x0000000000000000000000000000000000000000000000000000000000000000",285						apprestrict:       constants.NULL.ADDRESS,286						datasetrestrict:   constants.NULL.ADDRESS,287						requesterrestrict: constants.NULL.ADDRESS,288						salt:              web3.utils.randomHex(32),289						sign:              constants.NULL.SIGNATURE,290					});291				});292				it("verify", async () => {293					assert.isTrue(await IexecInstance.verifySignature(294						scheduler.address,295						odbtools.utils.hashWorkerpoolOrder(ERC712_domain, workerpoolorder),296						workerpoolorder.sign297					));298				});299			});300			describe("request", async () => {301				it("sign", async () => {302					requestorder = await user.signRequestOrder({303						app:                AppInstance.address,304						appmaxprice:        3,305						dataset:            DatasetInstance.address,306						datasetmaxprice:    1,307						workerpool:         constants.NULL.ADDRESS,308						workerpoolmaxprice: 25,309						volume:             1, // CHANGE FOR BOT310						category:           4,311						trust:              trusttarget,312						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",313						requester:          user.address,314						beneficiary:        user.address,315						callback:           constants.NULL.ADDRESS,316						params:             "<parameters>",317						salt:               web3.utils.randomHex(32),318						sign:               constants.NULL.SIGNATURE,319					});320				});321				it("verify", async () => {322					assert.isTrue(await IexecInstance.verifySignature(323						user.address,324						odbtools.utils.hashRequestOrder(ERC712_domain, requestorder),325						requestorder.sign326					));327				});328			});329		});330		describe("[1] order matching", async () => {331			it("[TX] match", async () => {332				txMined = await IexecInstance.matchOrders(apporder, datasetorder, workerpoolorder, requestorder, { from: user.address });333				gasReceipt.push([ "matchOrders", txMined.receipt.gasUsed ]);334				dealid = web3.utils.soliditySha3(335					{ t: 'bytes32', v: odbtools.utils.hashRequestOrder(ERC712_domain, requestorder) },336					{ t: 'uint256', v: 0                                                            },337				);338				events = tools.extractEvents(txMined, IexecInstance.address, "SchedulerNotice");339				assert.equal(events[0].args.workerpool, WorkerpoolInstance.address);340				assert.equal(events[0].args.dealid,     dealid                    );341				events = tools.extractEvents(txMined, IexecInstance.address, "OrdersMatched");342				assert.equal(events[0].args.dealid,         dealid                                                            );343				assert.equal(events[0].args.appHash,        odbtools.utils.hashAppOrder       (ERC712_domain, apporder       ));344				assert.equal(events[0].args.datasetHash,    odbtools.utils.hashDatasetOrder   (ERC712_domain, datasetorder   ));345				assert.equal(events[0].args.workerpoolHash, odbtools.utils.hashWorkerpoolOrder(ERC712_domain, workerpoolorder));346				assert.equal(events[0].args.requestHash,    odbtools.utils.hashRequestOrder   (ERC712_domain, requestorder   ));347				assert.equal(events[0].args.volume,         1                                                                 );348			});349		});350		describe("[2] initialization", async () => {351			it("[TX] initialize", async () => {352				txMined = await IexecInstance.initialize(dealid, 0, { from: scheduler.address });353				gasReceipt.push([ "initialize", txMined.receipt.gasUsed ]);354				taskid = web3.utils.soliditySha3({ t: 'bytes32', v: dealid }, { t: 'uint256', v: 0 });355				events = tools.extractEvents(txMined, IexecInstance.address, "TaskInitialize");356				assert.equal(events[0].args.taskid,     taskid                    );357				assert.equal(events[0].args.workerpool, WorkerpoolInstance.address);358			});359		});360		describe("[3] contribute", async () => {361			it("authorization signature", async () => {362				for (w of workers)363				{364					const preauth             = await scheduler.signPreAuthorization(taskid, w.agent.address);365					const [ auth, secret ]    = w.useenclave ? await broker.signAuthorization(preauth) : [ preauth, null ];366					authorizations[w.agent.address] = auth;367					secrets[w.agent.address]        = secret;368				}369			});370			it("run", async () => {371				consensus = odbtools.utils.hashConsensus(taskid, consensus);372				for (w of workers)373				{374					results[w.agent.address] = await w.agent.run(authorizations[w.agent.address], secrets[w.agent.address], w.result);375				}376			});377			it("[TX] contribute", async () => {378				for (w of workers)379				{380					txMined = await IexecInstance.contribute(381						authorizations[w.agent.address].taskid,  // task (authorization)382						results       [w.agent.address].hash,    // common    (result)383						results       [w.agent.address].seal,    // unique    (result)384						authorizations[w.agent.address].enclave, // address   (enclave)385						results       [w.agent.address].sign,    // signature (enclave)386						authorizations[w.agent.address].sign,    // signature (authorization)387						{ from: w.agent.address }388					);389					gasReceipt.push([ "contribute", txMined.receipt.gasUsed ]);390					events = tools.extractEvents(txMined, IexecInstance.address, "TaskContribute");391					assert.equal(events[0].args.taskid, authorizations[w.agent.address].taskid);392					assert.equal(events[0].args.worker, w.agent.address                       );393					assert.equal(events[0].args.hash,   results[w.agent.address].hash         );394				}395			});396		});397		describe("[4] reveal", async () => {398			it("[TX] reveal", async () => {399				for (w of workers)400				if (results[w.agent.address].hash == consensus.hash)401				{402					txMined = await IexecInstance.reveal(403						taskid,404						results[w.agent.address].digest,405						{ from: w.agent.address }406					);407					gasReceipt.push([ "reveal", txMined.receipt.gasUsed ]);408					events = tools.extractEvents(txMined, IexecInstance.address, "TaskReveal");409					assert.equal(events[0].args.taskid, taskid                         );410					assert.equal(events[0].args.worker, w.agent.address                );411					assert.equal(events[0].args.digest, results[w.agent.address].digest);412				}413			});414		});415		describe("[5] finalization", async () => {416			it("[TX] finalize", async () => {417				txMined = await IexecInstance.finalize(418					taskid,419					web3.utils.utf8ToHex("aResult"),420					"0x",421					{ from: scheduler.address }422				);423				gasReceipt.push([ "finalize", txMined.receipt.gasUsed ]);424				events = tools.extractEvents(txMined, IexecInstance.address, "TaskFinalize");425				assert.equal(events[0].args.taskid,  taskid                         );426				assert.equal(events[0].args.results, web3.utils.utf8ToHex("aResult"));427				// TODO: check 2 events by w.agent.address for w in workers428				// How to retreive events from the IexecClerk (5 rewards and 1 seize)429			});430		});431	});432	describe("â summary", async () => {433		it("task", async () => {434			task = await IexecInstance.viewTask(taskid);435			assert.equal    (       task.status,                   constants.TaskStatusEnum.COMPLETED                                        );436			assert.equal    (       task.dealid,                   dealid                                                                    );437			assert.equal    (Number(task.idx),                     0                                                                         );438			assert.equal    (Number(task.timeref),                 (await IexecInstance.viewCategory(requestorder.category)).workClockTimeRef);...004_fullchain-4workers.js
Source:004_fullchain-4workers.js  
...110						constants.NULL.BYTES32,111						"0x",112						{ from: appProvider.address }113					);114					events = tools.extractEvents(txMined, AppRegistryInstance.address, "Transfer");115					AppInstance = await App.at(tools.BN2Address(events[0].args.tokenId));116				});117			});118			describe("dataset", async () => {119				it("create", async () => {120					txMined = await DatasetRegistryInstance.createDataset(121						datasetProvider.address,122						"Pi",123						constants.MULTIADDR_BYTES,124						constants.NULL.BYTES32,125						{ from: datasetProvider.address }126					);127					events = tools.extractEvents(txMined, DatasetRegistryInstance.address, "Transfer");128					DatasetInstance = await Dataset.at(tools.BN2Address(events[0].args.tokenId));129				});130			});131			describe("workerpool", async () => {132				it("create", async () => {133					txMined = await WorkerpoolRegistryInstance.createWorkerpool(134						scheduler.address,135						"A test workerpool",136						{ from: scheduler.address }137					);138					events = tools.extractEvents(txMined, WorkerpoolRegistryInstance.address, "Transfer");139					WorkerpoolInstance = await Workerpool.at(tools.BN2Address(events[0].args.tokenId));140				});141				it("change policy", async () => {142					txMined = await WorkerpoolInstance.changePolicy(/* worker stake ratio */ 35, /* scheduler reward ratio */ 5, { from: scheduler.address });143					events = tools.extractEvents(txMined, WorkerpoolInstance.address, "PolicyUpdate");144					assert.equal(events[0].args.oldWorkerStakeRatioPolicy,     30);145					assert.equal(events[0].args.newWorkerStakeRatioPolicy,     35);146					assert.equal(events[0].args.oldSchedulerRewardRatioPolicy,  1);147					assert.equal(events[0].args.newSchedulerRewardRatioPolicy,  5);148				});149			});150		});151		describe("tokens", async () => {152			it("balances before", async () => {153				assert.deepEqual(await appProvider.viewAccount(),     [ 0, 0 ], "check balance");154				assert.deepEqual(await datasetProvider.viewAccount(), [ 0, 0 ], "check balance");155				assert.deepEqual(await scheduler.viewAccount(),       [ 0, 0 ], "check balance");156				assert.deepEqual(await worker1.viewAccount(),         [ 0, 0 ], "check balance");157				assert.deepEqual(await worker2.viewAccount(),         [ 0, 0 ], "check balance");158				assert.deepEqual(await worker3.viewAccount(),         [ 0, 0 ], "check balance");159				assert.deepEqual(await worker4.viewAccount(),         [ 0, 0 ], "check balance");160				assert.deepEqual(await worker5.viewAccount(),         [ 0, 0 ], "check balance");161				assert.deepEqual(await user.viewAccount(),            [ 0, 0 ], "check balance");162			});163			it("deposit", async () => {164				switch (DEPLOYMENT.asset)165				{166					case "Native":167						txMined = await IexecInstance.deposit({ from: iexecAdmin.address, value: 10000000 * 10 ** 9 });168						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.from,    constants.NULL.ADDRESS);169						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.to,      iexecAdmin.address);170						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.value,   10000000);171						break;172					case "Token":173						txMined = await RLCInstance.approveAndCall(IexecInstance.address, 10000000, "0x", { from: iexecAdmin.address });174						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.owner,   iexecAdmin.address);175						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.spender, IexecInstance.address);176						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.value,   10000000);177						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.from,    iexecAdmin.address);178						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.to,      IexecInstance.address);179						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.value,   10000000);180						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.from,    constants.NULL.ADDRESS);181						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.to,      iexecAdmin.address);182						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.value,   10000000);183						break;184				}185				txsMined = await Promise.all([186					IexecInstance.transfer(scheduler.address, 1000, { from: iexecAdmin.address }),187					IexecInstance.transfer(worker1.address,   1000, { from: iexecAdmin.address }),188					IexecInstance.transfer(worker2.address,   1000, { from: iexecAdmin.address }),189					IexecInstance.transfer(worker3.address,   1000, { from: iexecAdmin.address }),190					IexecInstance.transfer(worker4.address,   1000, { from: iexecAdmin.address }),191					IexecInstance.transfer(worker5.address,   1000, { from: iexecAdmin.address }),192					IexecInstance.transfer(user.address,      1000, { from: iexecAdmin.address }),193				]);194				assert.equal(tools.extractEvents(txsMined[0], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);195				assert.equal(tools.extractEvents(txsMined[0], IexecInstance.address, "Transfer")[0].args.value, 1000);196				assert.equal(tools.extractEvents(txsMined[1], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);197				assert.equal(tools.extractEvents(txsMined[1], IexecInstance.address, "Transfer")[0].args.value, 1000);198				assert.equal(tools.extractEvents(txsMined[2], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);199				assert.equal(tools.extractEvents(txsMined[2], IexecInstance.address, "Transfer")[0].args.value, 1000);200				assert.equal(tools.extractEvents(txsMined[3], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);201				assert.equal(tools.extractEvents(txsMined[3], IexecInstance.address, "Transfer")[0].args.value, 1000);202				assert.equal(tools.extractEvents(txsMined[4], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);203				assert.equal(tools.extractEvents(txsMined[4], IexecInstance.address, "Transfer")[0].args.value, 1000);204				assert.equal(tools.extractEvents(txsMined[5], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);205				assert.equal(tools.extractEvents(txsMined[5], IexecInstance.address, "Transfer")[0].args.value, 1000);206				assert.equal(tools.extractEvents(txsMined[6], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);207				assert.equal(tools.extractEvents(txsMined[6], IexecInstance.address, "Transfer")[0].args.value, 1000);208			});209			it("balances after", async () => {210				assert.deepEqual(await appProvider.viewAccount(),     [    0, 0 ], "check balance");211				assert.deepEqual(await datasetProvider.viewAccount(), [    0, 0 ], "check balance");212				assert.deepEqual(await scheduler.viewAccount(),       [ 1000, 0 ], "check balance");213				assert.deepEqual(await worker1.viewAccount(),         [ 1000, 0 ], "check balance");214				assert.deepEqual(await worker2.viewAccount(),         [ 1000, 0 ], "check balance");215				assert.deepEqual(await worker3.viewAccount(),         [ 1000, 0 ], "check balance");216				assert.deepEqual(await worker4.viewAccount(),         [ 1000, 0 ], "check balance");217				assert.deepEqual(await worker5.viewAccount(),         [ 1000, 0 ], "check balance");218				assert.deepEqual(await user.viewAccount(),            [ 1000, 0 ], "check balance");219			});220		});221		it("score", async () => {222			assert.equal(await worker1.viewScore(), 0, "score issue");223			assert.equal(await worker2.viewScore(), 0, "score issue");224			assert.equal(await worker3.viewScore(), 0, "score issue");225			assert.equal(await worker4.viewScore(), 0, "score issue");226			assert.equal(await worker5.viewScore(), 0, "score issue");227		});228	});229	describe("â pipeline", async () => {230		describe("[0] orders", async () => {231			describe("app", async () => {232				it("sign", async () => {233					apporder = await appProvider.signAppOrder({234						app:                AppInstance.address,235						appprice:           3,236						volume:             1000,237						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",238						datasetrestrict:    constants.NULL.ADDRESS,239						workerpoolrestrict: constants.NULL.ADDRESS,240						requesterrestrict:  constants.NULL.ADDRESS,241						salt:               web3.utils.randomHex(32),242						sign:               constants.NULL.SIGNATURE,243					});244				});245				it("verify", async () => {246					assert.isTrue(await IexecInstance.verifySignature(247						appProvider.address,248						odbtools.utils.hashAppOrder(ERC712_domain, apporder),249						apporder.sign250					));251				});252			});253			describe("dataset", async () => {254				it("sign", async () => {255					datasetorder = await datasetProvider.signDatasetOrder({256						dataset:            DatasetInstance.address,257						datasetprice:       1,258						volume:             1000,259						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",260						apprestrict:        constants.NULL.ADDRESS,261						workerpoolrestrict: constants.NULL.ADDRESS,262						requesterrestrict:  constants.NULL.ADDRESS,263						salt:               web3.utils.randomHex(32),264						sign:               constants.NULL.SIGNATURE,265					});266				});267				it("verify", async () => {268					assert.isTrue(await IexecInstance.verifySignature(269						datasetProvider.address,270						odbtools.utils.hashDatasetOrder(ERC712_domain, datasetorder),271						datasetorder.sign272					));273				});274			});275			describe("workerpool", async () => {276				it("sign", async () => {277					workerpoolorder = await scheduler.signWorkerpoolOrder({278						workerpool:        WorkerpoolInstance.address,279						workerpoolprice:   25,280						volume:            3,281						category:          4,282						trust:             trusttarget,283						tag:               "0x0000000000000000000000000000000000000000000000000000000000000000",284						apprestrict:       constants.NULL.ADDRESS,285						datasetrestrict:   constants.NULL.ADDRESS,286						requesterrestrict: constants.NULL.ADDRESS,287						salt:              web3.utils.randomHex(32),288						sign:              constants.NULL.SIGNATURE,289					});290				});291				it("verify", async () => {292					assert.isTrue(await IexecInstance.verifySignature(293						scheduler.address,294						odbtools.utils.hashWorkerpoolOrder(ERC712_domain, workerpoolorder),295						workerpoolorder.sign296					));297				});298			});299			describe("request", async () => {300				it("sign", async () => {301					requestorder = await user.signRequestOrder({302						app:                AppInstance.address,303						appmaxprice:        3,304						dataset:            DatasetInstance.address,305						datasetmaxprice:    1,306						workerpool:         constants.NULL.ADDRESS,307						workerpoolmaxprice: 25,308						volume:             1, // CHANGE FOR BOT309						category:           4,310						trust:              trusttarget,311						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",312						requester:          user.address,313						beneficiary:        user.address,314						callback:           constants.NULL.ADDRESS,315						params:             "<parameters>",316						salt:               web3.utils.randomHex(32),317						sign:               constants.NULL.SIGNATURE,318					});319				});320				it("verify", async () => {321					assert.isTrue(await IexecInstance.verifySignature(322						user.address,323						odbtools.utils.hashRequestOrder(ERC712_domain, requestorder),324						requestorder.sign325					));326				});327			});328		});329		describe("[1] order matching", async () => {330			it("[TX] match", async () => {331				txMined = await IexecInstance.matchOrders(apporder, datasetorder, workerpoolorder, requestorder, { from: user.address });332				gasReceipt.push([ "matchOrders", txMined.receipt.gasUsed ]);333				dealid = web3.utils.soliditySha3(334					{ t: 'bytes32', v: odbtools.utils.hashRequestOrder(ERC712_domain, requestorder) },335					{ t: 'uint256', v: 0                                                            },336				);337				events = tools.extractEvents(txMined, IexecInstance.address, "SchedulerNotice");338				assert.equal(events[0].args.workerpool, WorkerpoolInstance.address);339				assert.equal(events[0].args.dealid,     dealid                    );340				events = tools.extractEvents(txMined, IexecInstance.address, "OrdersMatched");341				assert.equal(events[0].args.dealid,         dealid                                                            );342				assert.equal(events[0].args.appHash,        odbtools.utils.hashAppOrder       (ERC712_domain, apporder       ));343				assert.equal(events[0].args.datasetHash,    odbtools.utils.hashDatasetOrder   (ERC712_domain, datasetorder   ));344				assert.equal(events[0].args.workerpoolHash, odbtools.utils.hashWorkerpoolOrder(ERC712_domain, workerpoolorder));345				assert.equal(events[0].args.requestHash,    odbtools.utils.hashRequestOrder   (ERC712_domain, requestorder   ));346				assert.equal(events[0].args.volume,         1                                                                 );347			});348		});349		describe("[2] initialization", async () => {350			it("[TX] initialize", async () => {351				txMined = await IexecInstance.initialize(dealid, 0, { from: scheduler.address });352				gasReceipt.push([ "initialize", txMined.receipt.gasUsed ]);353				taskid = web3.utils.soliditySha3({ t: 'bytes32', v: dealid }, { t: 'uint256', v: 0 });354				events = tools.extractEvents(txMined, IexecInstance.address, "TaskInitialize");355				assert.equal(events[0].args.taskid,     taskid                    );356				assert.equal(events[0].args.workerpool, WorkerpoolInstance.address);357			});358		});359		describe("[3] contribute", async () => {360			it("authorization signature", async () => {361				for (w of workers)362				{363					const preauth                   = await scheduler.signPreAuthorization(taskid, w.agent.address);364					const [ auth, secret ]          = w.useenclave ? await broker.signAuthorization(preauth) : [ preauth, null ];365					authorizations[w.agent.address] = auth;366					secrets[w.agent.address]        = secret;367				}368			});369			it("run", async () => {370				consensus = odbtools.utils.hashConsensus(taskid, consensus);371				for (w of workers)372				{373					results[w.agent.address] = await w.agent.run(authorizations[w.agent.address], secrets[w.agent.address], w.result);374				}375			});376			it("[TX] contribute", async () => {377				for (w of workers)378				{379					txMined = await IexecInstance.contribute(380						authorizations[w.agent.address].taskid,  // task (authorization)381						results       [w.agent.address].hash,    // common    (result)382						results       [w.agent.address].seal,    // unique    (result)383						authorizations[w.agent.address].enclave, // address   (enclave)384						results       [w.agent.address].sign,    // signature (enclave)385						authorizations[w.agent.address].sign,    // signature (authorization)386						{ from: w.agent.address }387					);388					gasReceipt.push([ "contribute", txMined.receipt.gasUsed ]);389					events = tools.extractEvents(txMined, IexecInstance.address, "TaskContribute");390					assert.equal(events[0].args.taskid, authorizations[w.agent.address].taskid);391					assert.equal(events[0].args.worker, w.agent.address                       );392					assert.equal(events[0].args.hash,   results[w.agent.address].hash         );393				}394			});395		});396		describe("[4] reveal", async () => {397			it("[TX] reveal", async () => {398				for (w of workers)399				if (results[w.agent.address].hash == consensus.hash)400				{401					txMined = await IexecInstance.reveal(402						taskid,403						results[w.agent.address].digest,404						{ from: w.agent.address }405					);406					gasReceipt.push([ "reveal", txMined.receipt.gasUsed ]);407					events = tools.extractEvents(txMined, IexecInstance.address, "TaskReveal");408					assert.equal(events[0].args.taskid, taskid                         );409					assert.equal(events[0].args.worker, w.agent.address                );410					assert.equal(events[0].args.digest, results[w.agent.address].digest);411				}412			});413		});414		describe("[5] finalization", async () => {415			it("[TX] finalize", async () => {416				txMined = await IexecInstance.finalize(417					taskid,418					web3.utils.utf8ToHex("aResult"),419					"0x",420					{ from: scheduler.address }421				);422				gasReceipt.push([ "finalize", txMined.receipt.gasUsed ]);423				events = tools.extractEvents(txMined, IexecInstance.address, "TaskFinalize");424				assert.equal(events[0].args.taskid,  taskid                         );425				assert.equal(events[0].args.results, web3.utils.utf8ToHex("aResult"));426				// TODO: check 2 events by w.agent.address for w in workers427				// How to retreive events from the IexecClerk (5 rewards and 1 seize)428			});429		});430	});431	describe("â summary", async () => {432		it("task", async () => {433			task = await IexecInstance.viewTask(taskid);434			assert.equal    (       task.status,                   constants.TaskStatusEnum.COMPLETED                                        );435			assert.equal    (       task.dealid,                   dealid                                                                    );436			assert.equal    (Number(task.idx),                     0                                                                         );437			assert.equal    (Number(task.timeref),                 (await IexecInstance.viewCategory(requestorder.category)).workClockTimeRef);...003_fullchain-3workers.js
Source:003_fullchain-3workers.js  
...109						constants.NULL.BYTES32,110						"0x",111						{ from: appProvider.address }112					);113					events = tools.extractEvents(txMined, AppRegistryInstance.address, "Transfer");114					AppInstance = await App.at(tools.BN2Address(events[0].args.tokenId));115				});116			});117			describe("dataset", async () => {118				it("create", async () => {119					txMined = await DatasetRegistryInstance.createDataset(120						datasetProvider.address,121						"Pi",122						constants.MULTIADDR_BYTES,123						constants.NULL.BYTES32,124						{ from: datasetProvider.address }125					);126					events = tools.extractEvents(txMined, DatasetRegistryInstance.address, "Transfer");127					DatasetInstance = await Dataset.at(tools.BN2Address(events[0].args.tokenId));128				});129			});130			describe("workerpool", async () => {131				it("create", async () => {132					txMined = await WorkerpoolRegistryInstance.createWorkerpool(133						scheduler.address,134						"A test workerpool",135						{ from: scheduler.address }136					);137					events = tools.extractEvents(txMined, WorkerpoolRegistryInstance.address, "Transfer");138					WorkerpoolInstance = await Workerpool.at(tools.BN2Address(events[0].args.tokenId));139				});140				it("change policy", async () => {141					txMined = await WorkerpoolInstance.changePolicy(/* worker stake ratio */ 35, /* scheduler reward ratio */ 5, { from: scheduler.address });142					events = tools.extractEvents(txMined, WorkerpoolInstance.address, "PolicyUpdate");143					assert.equal(events[0].args.oldWorkerStakeRatioPolicy,     30);144					assert.equal(events[0].args.newWorkerStakeRatioPolicy,     35);145					assert.equal(events[0].args.oldSchedulerRewardRatioPolicy,  1);146					assert.equal(events[0].args.newSchedulerRewardRatioPolicy,  5);147				});148			});149		});150		describe("tokens", async () => {151			it("balances before", async () => {152				assert.deepEqual(await appProvider.viewAccount(),     [ 0, 0 ], "check balance");153				assert.deepEqual(await datasetProvider.viewAccount(), [ 0, 0 ], "check balance");154				assert.deepEqual(await scheduler.viewAccount(),       [ 0, 0 ], "check balance");155				assert.deepEqual(await worker1.viewAccount(),         [ 0, 0 ], "check balance");156				assert.deepEqual(await worker2.viewAccount(),         [ 0, 0 ], "check balance");157				assert.deepEqual(await worker3.viewAccount(),         [ 0, 0 ], "check balance");158				assert.deepEqual(await worker4.viewAccount(),         [ 0, 0 ], "check balance");159				assert.deepEqual(await worker5.viewAccount(),         [ 0, 0 ], "check balance");160				assert.deepEqual(await user.viewAccount(),            [ 0, 0 ], "check balance");161			});162			it("deposit", async () => {163				switch (DEPLOYMENT.asset)164				{165					case "Native":166						txMined = await IexecInstance.deposit({ from: iexecAdmin.address, value: 10000000 * 10 ** 9 });167						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.from,    constants.NULL.ADDRESS);168						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.to,      iexecAdmin.address);169						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.value,   10000000);170						break;171					case "Token":172						txMined = await RLCInstance.approveAndCall(IexecInstance.address, 10000000, "0x", { from: iexecAdmin.address });173						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.owner,   iexecAdmin.address);174						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.spender, IexecInstance.address);175						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.value,   10000000);176						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.from,    iexecAdmin.address);177						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.to,      IexecInstance.address);178						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.value,   10000000);179						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.from,    constants.NULL.ADDRESS);180						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.to,      iexecAdmin.address);181						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.value,   10000000);182						break;183				}184				txsMined = await Promise.all([185					IexecInstance.transfer(scheduler.address, 1000, { from: iexecAdmin.address }),186					IexecInstance.transfer(worker1.address,   1000, { from: iexecAdmin.address }),187					IexecInstance.transfer(worker2.address,   1000, { from: iexecAdmin.address }),188					IexecInstance.transfer(worker3.address,   1000, { from: iexecAdmin.address }),189					IexecInstance.transfer(worker4.address,   1000, { from: iexecAdmin.address }),190					IexecInstance.transfer(worker5.address,   1000, { from: iexecAdmin.address }),191					IexecInstance.transfer(user.address,      1000, { from: iexecAdmin.address }),192				]);193				assert.equal(tools.extractEvents(txsMined[0], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);194				assert.equal(tools.extractEvents(txsMined[0], IexecInstance.address, "Transfer")[0].args.value, 1000);195				assert.equal(tools.extractEvents(txsMined[1], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);196				assert.equal(tools.extractEvents(txsMined[1], IexecInstance.address, "Transfer")[0].args.value, 1000);197				assert.equal(tools.extractEvents(txsMined[2], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);198				assert.equal(tools.extractEvents(txsMined[2], IexecInstance.address, "Transfer")[0].args.value, 1000);199				assert.equal(tools.extractEvents(txsMined[3], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);200				assert.equal(tools.extractEvents(txsMined[3], IexecInstance.address, "Transfer")[0].args.value, 1000);201				assert.equal(tools.extractEvents(txsMined[4], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);202				assert.equal(tools.extractEvents(txsMined[4], IexecInstance.address, "Transfer")[0].args.value, 1000);203				assert.equal(tools.extractEvents(txsMined[5], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);204				assert.equal(tools.extractEvents(txsMined[5], IexecInstance.address, "Transfer")[0].args.value, 1000);205				assert.equal(tools.extractEvents(txsMined[6], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);206				assert.equal(tools.extractEvents(txsMined[6], IexecInstance.address, "Transfer")[0].args.value, 1000);207			});208			it("balances after", async () => {209				assert.deepEqual(await appProvider.viewAccount(),     [    0, 0 ], "check balance");210				assert.deepEqual(await datasetProvider.viewAccount(), [    0, 0 ], "check balance");211				assert.deepEqual(await scheduler.viewAccount(),       [ 1000, 0 ], "check balance");212				assert.deepEqual(await worker1.viewAccount(),         [ 1000, 0 ], "check balance");213				assert.deepEqual(await worker2.viewAccount(),         [ 1000, 0 ], "check balance");214				assert.deepEqual(await worker3.viewAccount(),         [ 1000, 0 ], "check balance");215				assert.deepEqual(await worker4.viewAccount(),         [ 1000, 0 ], "check balance");216				assert.deepEqual(await worker5.viewAccount(),         [ 1000, 0 ], "check balance");217				assert.deepEqual(await user.viewAccount(),            [ 1000, 0 ], "check balance");218			});219		});220		it("score", async () => {221			assert.equal(await worker1.viewScore(), 0, "score issue");222			assert.equal(await worker2.viewScore(), 0, "score issue");223			assert.equal(await worker3.viewScore(), 0, "score issue");224			assert.equal(await worker4.viewScore(), 0, "score issue");225			assert.equal(await worker5.viewScore(), 0, "score issue");226		});227	});228	describe("â pipeline", async () => {229		describe("[0] orders", async () => {230			describe("app", async () => {231				it("sign", async () => {232					apporder = await appProvider.signAppOrder({233						app:                AppInstance.address,234						appprice:           3,235						volume:             1000,236						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",237						datasetrestrict:    constants.NULL.ADDRESS,238						workerpoolrestrict: constants.NULL.ADDRESS,239						requesterrestrict:  constants.NULL.ADDRESS,240						salt:               web3.utils.randomHex(32),241						sign:               constants.NULL.SIGNATURE,242					});243				});244				it("verify", async () => {245					assert.isTrue(await IexecInstance.verifySignature(246						appProvider.address,247						odbtools.utils.hashAppOrder(ERC712_domain, apporder),248						apporder.sign249					));250				});251			});252			describe("dataset", async () => {253				it("sign", async () => {254					datasetorder = await datasetProvider.signDatasetOrder({255						dataset:            DatasetInstance.address,256						datasetprice:       1,257						volume:             1000,258						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",259						apprestrict:        constants.NULL.ADDRESS,260						workerpoolrestrict: constants.NULL.ADDRESS,261						requesterrestrict:  constants.NULL.ADDRESS,262						salt:               web3.utils.randomHex(32),263						sign:               constants.NULL.SIGNATURE,264					});265				});266				it("verify", async () => {267					assert.isTrue(await IexecInstance.verifySignature(268							datasetProvider.address,269							odbtools.utils.hashDatasetOrder(ERC712_domain, datasetorder),270							datasetorder.sign271					));272				});273			});274			describe("workerpool", async () => {275				it("sign", async () => {276					workerpoolorder = await scheduler.signWorkerpoolOrder({277						workerpool:        WorkerpoolInstance.address,278						workerpoolprice:   25,279						volume:            3,280						category:          4,281						trust:             trusttarget,282						tag:               "0x0000000000000000000000000000000000000000000000000000000000000000",283						apprestrict:       constants.NULL.ADDRESS,284						datasetrestrict:   constants.NULL.ADDRESS,285						requesterrestrict: constants.NULL.ADDRESS,286						salt:              web3.utils.randomHex(32),287						sign:              constants.NULL.SIGNATURE,288					});289				});290				it("verify", async () => {291					assert.isTrue(await IexecInstance.verifySignature(292							scheduler.address,293							odbtools.utils.hashWorkerpoolOrder(ERC712_domain, workerpoolorder),294							workerpoolorder.sign295					));296				});297			});298			describe("request", async () => {299				it("sign", async () => {300					requestorder = await user.signRequestOrder({301						app:                AppInstance.address,302						appmaxprice:        3,303						dataset:            DatasetInstance.address,304						datasetmaxprice:    1,305						workerpool:         constants.NULL.ADDRESS,306						workerpoolmaxprice: 25,307						volume:             1, // CHANGE FOR BOT308						category:           4,309						trust:              trusttarget,310						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",311						requester:          user.address,312						beneficiary:        user.address,313						callback:           constants.NULL.ADDRESS,314						params:             "<parameters>",315						salt:               web3.utils.randomHex(32),316						sign:               constants.NULL.SIGNATURE,317					});318				});319				it("verify", async () => {320					assert.isTrue(await IexecInstance.verifySignature(321						user.address,322						odbtools.utils.hashRequestOrder(ERC712_domain, requestorder),323						requestorder.sign324					));325				});326			});327		});328		describe("[1] order matching", async () => {329			it("[TX] match", async () => {330				txMined = await IexecInstance.matchOrders(apporder, datasetorder, workerpoolorder, requestorder, { from: user.address });331				gasReceipt.push([ "matchOrders", txMined.receipt.gasUsed ]);332				dealid = web3.utils.soliditySha3(333					{ t: 'bytes32', v: odbtools.utils.hashRequestOrder(ERC712_domain, requestorder) },334					{ t: 'uint256', v: 0                                                            },335				);336				events = tools.extractEvents(txMined, IexecInstance.address, "SchedulerNotice");337				assert.equal(events[0].args.workerpool, WorkerpoolInstance.address);338				assert.equal(events[0].args.dealid,     dealid                    );339				events = tools.extractEvents(txMined, IexecInstance.address, "OrdersMatched");340				assert.equal(events[0].args.dealid,         dealid                                                            );341				assert.equal(events[0].args.appHash,        odbtools.utils.hashAppOrder       (ERC712_domain, apporder       ));342				assert.equal(events[0].args.datasetHash,    odbtools.utils.hashDatasetOrder   (ERC712_domain, datasetorder   ));343				assert.equal(events[0].args.workerpoolHash, odbtools.utils.hashWorkerpoolOrder(ERC712_domain, workerpoolorder));344				assert.equal(events[0].args.requestHash,    odbtools.utils.hashRequestOrder   (ERC712_domain, requestorder   ));345				assert.equal(events[0].args.volume,         1                                                                 );346			});347		});348		describe("[2] initialization", async () => {349			it("[TX] initialize", async () => {350				txMined = await IexecInstance.initialize(dealid, 0, { from: scheduler.address });351				gasReceipt.push([ "initialize", txMined.receipt.gasUsed ]);352				taskid = web3.utils.soliditySha3({ t: 'bytes32', v: dealid }, { t: 'uint256', v: 0 });353				events = tools.extractEvents(txMined, IexecInstance.address, "TaskInitialize");354				assert.equal(events[0].args.taskid,     taskid                    );355				assert.equal(events[0].args.workerpool, WorkerpoolInstance.address);356			});357		});358		describe("[3] contribute", async () => {359			it("authorization signature", async () => {360				for (w of workers)361				{362					const preauth                   = await scheduler.signPreAuthorization(taskid, w.agent.address);363					const [ auth, secret ]          = w.useenclave ? await broker.signAuthorization(preauth) : [ preauth, null ];364					authorizations[w.agent.address] = auth;365					secrets[w.agent.address]        = secret;366				}367			});368			it("run", async () => {369				consensus = odbtools.utils.hashConsensus(taskid, consensus);370				for (w of workers)371				{372					results[w.agent.address] = await w.agent.run(authorizations[w.agent.address], secrets[w.agent.address], w.result);373				}374			});375			it("[TX] contribute", async () => {376				for (w of workers)377				{378					txMined = await IexecInstance.contribute(379						authorizations[w.agent.address].taskid,  // task (authorization)380						results       [w.agent.address].hash,           // common    (result)381						results       [w.agent.address].seal,           // unique    (result)382						authorizations[w.agent.address].enclave, // address   (enclave)383						results       [w.agent.address].sign,           // signature (enclave)384						authorizations[w.agent.address].sign,    // signature (authorization)385						{ from: w.agent.address }386					);387					gasReceipt.push([ "contribute", txMined.receipt.gasUsed ]);388					events = tools.extractEvents(txMined, IexecInstance.address, "TaskContribute");389					assert.equal(events[0].args.taskid, authorizations[w.agent.address].taskid);390					assert.equal(events[0].args.worker, w.agent.address                       );391					assert.equal(events[0].args.hash,   results[w.agent.address].hash         );392				}393			});394		});395		describe("[4] reveal", async () => {396			it("[TX] reveal", async () => {397				for (w of workers)398				if (results[w.agent.address].hash == consensus.hash)399				{400					txMined = await IexecInstance.reveal(401						taskid,402						results[w.agent.address].digest,403						{ from: w.agent.address }404					);405					gasReceipt.push([ "reveal", txMined.receipt.gasUsed ]);406					events = tools.extractEvents(txMined, IexecInstance.address, "TaskReveal");407					assert.equal(events[0].args.taskid, taskid                   );408					assert.equal(events[0].args.worker, w.agent.address                );409					assert.equal(events[0].args.digest, results[w.agent.address].digest);410				}411			});412		});413		describe("[5] finalization", async () => {414			it("[TX] finalize", async () => {415				txMined = await IexecInstance.finalize(416					taskid,417					web3.utils.utf8ToHex("aResult"),418					"0x",419					{ from: scheduler.address }420				);421				gasReceipt.push([ "finalize", txMined.receipt.gasUsed ]);422				events = tools.extractEvents(txMined, IexecInstance.address, "TaskFinalize");423				assert.equal(events[0].args.taskid,  taskid                         );424				assert.equal(events[0].args.results, web3.utils.utf8ToHex("aResult"));425				// TODO: check 2 events by w.agent.address for w in workers426				// How to retreive events from the IexecClerk (5 rewards and 1 seize)427			});428		});429	});430	describe("â summary", async () => {431		it("task", async () => {432			task = await IexecInstance.viewTask(taskid);433			assert.equal    (       task.status,                   constants.TaskStatusEnum.COMPLETED                                        );434			assert.equal    (       task.dealid,                   dealid                                                                    );435			assert.equal    (Number(task.idx),                     0                                                                         );436			assert.equal    (Number(task.timeref),                 (await IexecInstance.viewCategory(requestorder.category)).workClockTimeRef);...002_fullchain-2workers.js
Source:002_fullchain-2workers.js  
...108						constants.NULL.BYTES32,109						"0x",110						{ from: appProvider.address }111					);112					events = tools.extractEvents(txMined, AppRegistryInstance.address, "Transfer");113					AppInstance = await App.at(tools.BN2Address(events[0].args.tokenId));114				});115			});116			describe("dataset", async () => {117				it("create", async () => {118					txMined = await DatasetRegistryInstance.createDataset(119						datasetProvider.address,120						"Pi",121						constants.MULTIADDR_BYTES,122						constants.NULL.BYTES32,123						{ from: datasetProvider.address }124					);125					events = tools.extractEvents(txMined, DatasetRegistryInstance.address, "Transfer");126					DatasetInstance = await Dataset.at(tools.BN2Address(events[0].args.tokenId));127				});128			});129			describe("workerpool", async () => {130				it("create", async () => {131					txMined = await WorkerpoolRegistryInstance.createWorkerpool(132						scheduler.address,133						"A test workerpool",134						{ from: scheduler.address }135					);136					events = tools.extractEvents(txMined, WorkerpoolRegistryInstance.address, "Transfer");137					WorkerpoolInstance = await Workerpool.at(tools.BN2Address(events[0].args.tokenId));138				});139				it("change policy", async () => {140					txMined = await WorkerpoolInstance.changePolicy(/* worker stake ratio */ 35, /* scheduler reward ratio */ 5, { from: scheduler.address });141					events = tools.extractEvents(txMined, WorkerpoolInstance.address, "PolicyUpdate");142					assert.equal(events[0].args.oldWorkerStakeRatioPolicy,     30);143					assert.equal(events[0].args.newWorkerStakeRatioPolicy,     35);144					assert.equal(events[0].args.oldSchedulerRewardRatioPolicy,  1);145					assert.equal(events[0].args.newSchedulerRewardRatioPolicy,  5);146				});147			});148		});149		describe("tokens", async () => {150			it("balances before", async () => {151				assert.deepEqual(await appProvider.viewAccount(),     [ 0, 0 ], "check balance");152				assert.deepEqual(await datasetProvider.viewAccount(), [ 0, 0 ], "check balance");153				assert.deepEqual(await scheduler.viewAccount(),       [ 0, 0 ], "check balance");154				assert.deepEqual(await worker1.viewAccount(),         [ 0, 0 ], "check balance");155				assert.deepEqual(await worker2.viewAccount(),         [ 0, 0 ], "check balance");156				assert.deepEqual(await worker3.viewAccount(),         [ 0, 0 ], "check balance");157				assert.deepEqual(await worker4.viewAccount(),         [ 0, 0 ], "check balance");158				assert.deepEqual(await worker5.viewAccount(),         [ 0, 0 ], "check balance");159				assert.deepEqual(await user.viewAccount(),            [ 0, 0 ], "check balance");160			});161			it("deposit", async () => {162				switch (DEPLOYMENT.asset)163				{164					case "Native":165						txMined = await IexecInstance.deposit({ from: iexecAdmin.address, value: 10000000 * 10 ** 9 });166						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.from,    constants.NULL.ADDRESS);167						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.to,      iexecAdmin.address);168						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.value,   10000000);169						break;170					case "Token":171						txMined = await RLCInstance.approveAndCall(IexecInstance.address, 10000000, "0x", { from: iexecAdmin.address });172						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.owner,   iexecAdmin.address);173						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.spender, IexecInstance.address);174						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.value,   10000000);175						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.from,    iexecAdmin.address);176						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.to,      IexecInstance.address);177						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.value,   10000000);178						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.from,    constants.NULL.ADDRESS);179						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.to,      iexecAdmin.address);180						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.value,   10000000);181						break;182				}183				txsMined = await Promise.all([184					IexecInstance.transfer(scheduler.address, 1000, { from: iexecAdmin.address }),185					IexecInstance.transfer(worker1.address,   1000, { from: iexecAdmin.address }),186					IexecInstance.transfer(worker2.address,   1000, { from: iexecAdmin.address }),187					IexecInstance.transfer(worker3.address,   1000, { from: iexecAdmin.address }),188					IexecInstance.transfer(worker4.address,   1000, { from: iexecAdmin.address }),189					IexecInstance.transfer(worker5.address,   1000, { from: iexecAdmin.address }),190					IexecInstance.transfer(user.address,      1000, { from: iexecAdmin.address }),191				]);192				assert.equal(tools.extractEvents(txsMined[0], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);193				assert.equal(tools.extractEvents(txsMined[0], IexecInstance.address, "Transfer")[0].args.value, 1000);194				assert.equal(tools.extractEvents(txsMined[1], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);195				assert.equal(tools.extractEvents(txsMined[1], IexecInstance.address, "Transfer")[0].args.value, 1000);196				assert.equal(tools.extractEvents(txsMined[2], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);197				assert.equal(tools.extractEvents(txsMined[2], IexecInstance.address, "Transfer")[0].args.value, 1000);198				assert.equal(tools.extractEvents(txsMined[3], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);199				assert.equal(tools.extractEvents(txsMined[3], IexecInstance.address, "Transfer")[0].args.value, 1000);200				assert.equal(tools.extractEvents(txsMined[4], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);201				assert.equal(tools.extractEvents(txsMined[4], IexecInstance.address, "Transfer")[0].args.value, 1000);202				assert.equal(tools.extractEvents(txsMined[5], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);203				assert.equal(tools.extractEvents(txsMined[5], IexecInstance.address, "Transfer")[0].args.value, 1000);204				assert.equal(tools.extractEvents(txsMined[6], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);205				assert.equal(tools.extractEvents(txsMined[6], IexecInstance.address, "Transfer")[0].args.value, 1000);206			});207			it("balances after", async () => {208				assert.deepEqual(await appProvider.viewAccount(),     [    0, 0 ], "check balance");209				assert.deepEqual(await datasetProvider.viewAccount(), [    0, 0 ], "check balance");210				assert.deepEqual(await scheduler.viewAccount(),       [ 1000, 0 ], "check balance");211				assert.deepEqual(await worker1.viewAccount(),         [ 1000, 0 ], "check balance");212				assert.deepEqual(await worker2.viewAccount(),         [ 1000, 0 ], "check balance");213				assert.deepEqual(await worker3.viewAccount(),         [ 1000, 0 ], "check balance");214				assert.deepEqual(await worker4.viewAccount(),         [ 1000, 0 ], "check balance");215				assert.deepEqual(await worker5.viewAccount(),         [ 1000, 0 ], "check balance");216				assert.deepEqual(await user.viewAccount(),            [ 1000, 0 ], "check balance");217			});218		});219		it("score", async () => {220			assert.equal(await worker1.viewScore(), 0, "score issue");221			assert.equal(await worker2.viewScore(), 0, "score issue");222			assert.equal(await worker3.viewScore(), 0, "score issue");223			assert.equal(await worker4.viewScore(), 0, "score issue");224			assert.equal(await worker5.viewScore(), 0, "score issue");225		});226	});227	describe("â pipeline", async () => {228		describe("[0] orders", async () => {229			describe("app", async () => {230				it("sign", async () => {231					apporder = await appProvider.signAppOrder({232						app:                AppInstance.address,233						appprice:           3,234						volume:             1000,235						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",236						datasetrestrict:    constants.NULL.ADDRESS,237						workerpoolrestrict: constants.NULL.ADDRESS,238						requesterrestrict:  constants.NULL.ADDRESS,239						salt:               web3.utils.randomHex(32),240						sign:               constants.NULL.SIGNATURE,241					});242				});243				it("verify", async () => {244					assert.isTrue(await IexecInstance.verifySignature(245						appProvider.address,246						odbtools.utils.hashAppOrder(ERC712_domain, apporder),247						apporder.sign248					));249				});250			});251			describe("dataset", async () => {252				it("sign", async () => {253					datasetorder = await datasetProvider.signDatasetOrder({254						dataset:            DatasetInstance.address,255						datasetprice:       1,256						volume:             1000,257						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",258						apprestrict:        constants.NULL.ADDRESS,259						workerpoolrestrict: constants.NULL.ADDRESS,260						requesterrestrict:  constants.NULL.ADDRESS,261						salt:               web3.utils.randomHex(32),262						sign:               constants.NULL.SIGNATURE,263					});264				});265				it("verify", async () => {266					assert.isTrue(await IexecInstance.verifySignature(267						datasetProvider.address,268						odbtools.utils.hashDatasetOrder(ERC712_domain, datasetorder),269						datasetorder.sign270					));271				});272			});273			describe("workerpool", async () => {274				it("sign", async () => {275					workerpoolorder = await scheduler.signWorkerpoolOrder({276						workerpool:        WorkerpoolInstance.address,277						workerpoolprice:   25,278						volume:            3,279						category:          4,280						trust:             trusttarget,281						tag:               "0x0000000000000000000000000000000000000000000000000000000000000000",282						apprestrict:       constants.NULL.ADDRESS,283						datasetrestrict:   constants.NULL.ADDRESS,284						requesterrestrict: constants.NULL.ADDRESS,285						salt:              web3.utils.randomHex(32),286						sign:              constants.NULL.SIGNATURE,287					});288				});289				it("verify", async () => {290					assert.isTrue(await IexecInstance.verifySignature(291						scheduler.address,292						odbtools.utils.hashWorkerpoolOrder(ERC712_domain, workerpoolorder),293						workerpoolorder.sign294					));295				});296			});297			describe("request", async () => {298				it("sign", async () => {299					requestorder = await user.signRequestOrder({300						app:                AppInstance.address,301						appmaxprice:        3,302						dataset:            DatasetInstance.address,303						datasetmaxprice:    1,304						workerpool:         constants.NULL.ADDRESS,305						workerpoolmaxprice: 25,306						volume:             1, // CHANGE FOR BOT307						category:           4,308						trust:              trusttarget,309						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",310						requester:          user.address,311						beneficiary:        user.address,312						callback:           constants.NULL.ADDRESS,313						params:             "<parameters>",314						salt:               web3.utils.randomHex(32),315						sign:               constants.NULL.SIGNATURE,316					});317				});318				it("verify", async () => {319					assert.isTrue(await IexecInstance.verifySignature(320						user.address,321						odbtools.utils.hashRequestOrder(ERC712_domain, requestorder),322						requestorder.sign323					));324				});325			});326		});327		describe("[1] order matching", async () => {328			it("[TX] match", async () => {329				txMined = await IexecInstance.matchOrders(apporder, datasetorder, workerpoolorder, requestorder, { from: user.address });330				gasReceipt.push([ "matchOrders", txMined.receipt.gasUsed ]);331				dealid = web3.utils.soliditySha3(332					{ t: 'bytes32', v: odbtools.utils.hashRequestOrder(ERC712_domain, requestorder) },333					{ t: 'uint256', v: 0                                                      },334				);335				events = tools.extractEvents(txMined, IexecInstance.address, "SchedulerNotice");336				assert.equal(events[0].args.workerpool, WorkerpoolInstance.address);337				assert.equal(events[0].args.dealid,     dealid                    );338				events = tools.extractEvents(txMined, IexecInstance.address, "OrdersMatched");339				assert.equal(events[0].args.dealid,         dealid                                                      );340				assert.equal(events[0].args.appHash,        odbtools.utils.hashAppOrder       (ERC712_domain, apporder       ));341				assert.equal(events[0].args.datasetHash,    odbtools.utils.hashDatasetOrder   (ERC712_domain, datasetorder   ));342				assert.equal(events[0].args.workerpoolHash, odbtools.utils.hashWorkerpoolOrder(ERC712_domain, workerpoolorder));343				assert.equal(events[0].args.requestHash,    odbtools.utils.hashRequestOrder   (ERC712_domain, requestorder   ));344				assert.equal(events[0].args.volume,         1                                                           );345			});346		});347		describe("[2] initialization", async () => {348			it("[TX] initialize", async () => {349				txMined = await IexecInstance.initialize(dealid, 0, { from: scheduler.address });350				gasReceipt.push([ "initialize", txMined.receipt.gasUsed ]);351				taskid = web3.utils.soliditySha3({ t: 'bytes32', v: dealid }, { t: 'uint256', v: 0 });352				events = tools.extractEvents(txMined, IexecInstance.address, "TaskInitialize");353				assert.equal(events[0].args.taskid,     taskid                    );354				assert.equal(events[0].args.workerpool, WorkerpoolInstance.address);355			});356		});357		describe("[3] contribute", async () => {358			it("authorization signature", async () => {359				for (w of workers)360				{361					const preauth                   = await scheduler.signPreAuthorization(taskid, w.agent.address);362					const [ auth, secret ]          = w.useenclave ? await broker.signAuthorization(preauth) : [ preauth, null ];363					authorizations[w.agent.address] = auth;364					secrets[w.agent.address]        = secret;365				}366			});367			it("run", async () => {368				consensus = odbtools.utils.hashConsensus(taskid, consensus);369				for (w of workers)370				{371					results[w.agent.address] = await w.agent.run(authorizations[w.agent.address], secrets[w.agent.address], w.result);372				}373			});374			it("[TX] contribute", async () => {375				for (w of workers)376				{377					txMined = await IexecInstance.contribute(378						authorizations[w.agent.address].taskid,  // task (authorization)379						results       [w.agent.address].hash,    // common    (result)380						results       [w.agent.address].seal,    // unique    (result)381						authorizations[w.agent.address].enclave, // address   (enclave)382						results       [w.agent.address].sign,    // signature (enclave)383						authorizations[w.agent.address].sign,    // signature (authorization)384						{ from: w.agent.address }385					);386					gasReceipt.push([ "contribute", txMined.receipt.gasUsed ]);387					events = tools.extractEvents(txMined, IexecInstance.address, "TaskContribute");388					assert.equal(events[0].args.taskid, authorizations[w.agent.address].taskid);389					assert.equal(events[0].args.worker, w.agent.address                       );390					assert.equal(events[0].args.hash,   results[w.agent.address].hash         );391				}392			});393		});394		describe("[4] reveal", async () => {395			it("[TX] reveal", async () => {396				for (w of workers)397				if (results[w.agent.address].hash == consensus.hash)398				{399					txMined = await IexecInstance.reveal(400						taskid,401						results[w.agent.address].digest,402						{ from: w.agent.address }403					);404					gasReceipt.push([ "reveal", txMined.receipt.gasUsed ]);405					events = tools.extractEvents(txMined, IexecInstance.address, "TaskReveal");406					assert.equal(events[0].args.taskid, taskid                         );407					assert.equal(events[0].args.worker, w.agent.address                );408					assert.equal(events[0].args.digest, results[w.agent.address].digest);409				}410			});411		});412		describe("[5] finalization", async () => {413			it("[TX] finalize", async () => {414				txMined = await IexecInstance.finalize(415					taskid,416					web3.utils.utf8ToHex("aResult"),417					"0x",418					{ from: scheduler.address }419				);420				gasReceipt.push([ "finalize", txMined.receipt.gasUsed ]);421				events = tools.extractEvents(txMined, IexecInstance.address, "TaskFinalize");422				assert.equal(events[0].args.taskid,  taskid                         );423				assert.equal(events[0].args.results, web3.utils.utf8ToHex("aResult"));424				// TODO: check 2 events by w.address for w in workers425				// How to retreive events from the IexecClerk (5 rewards and 1 seize)426			});427		});428	});429	describe("â summary", async () => {430		it("task", async () => {431			task = await IexecInstance.viewTask(taskid);432			assert.equal    (       task.status,                   constants.TaskStatusEnum.COMPLETED                                        );433			assert.equal    (       task.dealid,                   dealid                                                                    );434			assert.equal    (Number(task.idx),                     0                                                                         );435			assert.equal    (Number(task.timeref),                 (await IexecInstance.viewCategory(requestorder.category)).workClockTimeRef);...001_fullchain-1workers.js
Source:001_fullchain-1workers.js  
...107						constants.NULL.BYTES32,108						"0x",109						{ from: appProvider.address }110					);111					events = tools.extractEvents(txMined, AppRegistryInstance.address, "Transfer");112					AppInstance = await App.at(tools.BN2Address(events[0].args.tokenId));113				});114			});115			describe("dataset", async () => {116				it("create", async () => {117					txMined = await DatasetRegistryInstance.createDataset(118						datasetProvider.address,119						"Pi",120						constants.MULTIADDR_BYTES,121						constants.NULL.BYTES32,122						{ from: datasetProvider.address }123					);124					events = tools.extractEvents(txMined, DatasetRegistryInstance.address, "Transfer");125					DatasetInstance = await Dataset.at(tools.BN2Address(events[0].args.tokenId));126				});127			});128			describe("workerpool", async () => {129				it("create", async () => {130					txMined = await WorkerpoolRegistryInstance.createWorkerpool(131						scheduler.address,132						"A test workerpool",133						{ from: scheduler.address }134					);135					events = tools.extractEvents(txMined, WorkerpoolRegistryInstance.address, "Transfer");136					WorkerpoolInstance = await Workerpool.at(tools.BN2Address(events[0].args.tokenId));137				});138				it("change policy", async () => {139					txMined = await WorkerpoolInstance.changePolicy(/* worker stake ratio */ 35, /* scheduler reward ratio */ 5, { from: scheduler.address });140					events = tools.extractEvents(txMined, WorkerpoolInstance.address, "PolicyUpdate");141					assert.equal(events[0].args.oldWorkerStakeRatioPolicy,     30);142					assert.equal(events[0].args.newWorkerStakeRatioPolicy,     35);143					assert.equal(events[0].args.oldSchedulerRewardRatioPolicy,  1);144					assert.equal(events[0].args.newSchedulerRewardRatioPolicy,  5);145				});146			});147		});148		describe("tokens", async () => {149			it("balances before", async () => {150				assert.deepEqual(await appProvider.viewAccount(),     [ 0, 0 ], "check balance");151				assert.deepEqual(await datasetProvider.viewAccount(), [ 0, 0 ], "check balance");152				assert.deepEqual(await scheduler.viewAccount(),       [ 0, 0 ], "check balance");153				assert.deepEqual(await worker1.viewAccount(),         [ 0, 0 ], "check balance");154				assert.deepEqual(await worker2.viewAccount(),         [ 0, 0 ], "check balance");155				assert.deepEqual(await worker3.viewAccount(),         [ 0, 0 ], "check balance");156				assert.deepEqual(await worker4.viewAccount(),         [ 0, 0 ], "check balance");157				assert.deepEqual(await worker5.viewAccount(),         [ 0, 0 ], "check balance");158				assert.deepEqual(await user.viewAccount(),            [ 0, 0 ], "check balance");159			});160			it("deposit", async () => {161				switch (DEPLOYMENT.asset)162				{163					case "Native":164						txMined = await IexecInstance.deposit({ from: iexecAdmin.address, value: 10000000 * 10 ** 9 });165						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.from,    constants.NULL.ADDRESS);166						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.to,      iexecAdmin.address);167						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.value,   10000000);168						break;169					case "Token":170						txMined = await RLCInstance.approveAndCall(IexecInstance.address, 10000000, "0x", { from: iexecAdmin.address });171						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.owner,   iexecAdmin.address);172						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.spender, IexecInstance.address);173						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.value,   10000000);174						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.from,    iexecAdmin.address);175						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.to,      IexecInstance.address);176						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.value,   10000000);177						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.from,    constants.NULL.ADDRESS);178						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.to,      iexecAdmin.address);179						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.value,   10000000);180						break;181				}182				txsMined = await Promise.all([183					IexecInstance.transfer(scheduler.address, 1000, { from: iexecAdmin.address }),184					IexecInstance.transfer(worker1.address,   1000, { from: iexecAdmin.address }),185					IexecInstance.transfer(worker2.address,   1000, { from: iexecAdmin.address }),186					IexecInstance.transfer(worker3.address,   1000, { from: iexecAdmin.address }),187					IexecInstance.transfer(worker4.address,   1000, { from: iexecAdmin.address }),188					IexecInstance.transfer(worker5.address,   1000, { from: iexecAdmin.address }),189					IexecInstance.transfer(user.address,      1000, { from: iexecAdmin.address }),190				]);191				assert.equal(tools.extractEvents(txsMined[0], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);192				assert.equal(tools.extractEvents(txsMined[0], IexecInstance.address, "Transfer")[0].args.value, 1000);193				assert.equal(tools.extractEvents(txsMined[1], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);194				assert.equal(tools.extractEvents(txsMined[1], IexecInstance.address, "Transfer")[0].args.value, 1000);195				assert.equal(tools.extractEvents(txsMined[2], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);196				assert.equal(tools.extractEvents(txsMined[2], IexecInstance.address, "Transfer")[0].args.value, 1000);197				assert.equal(tools.extractEvents(txsMined[3], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);198				assert.equal(tools.extractEvents(txsMined[3], IexecInstance.address, "Transfer")[0].args.value, 1000);199				assert.equal(tools.extractEvents(txsMined[4], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);200				assert.equal(tools.extractEvents(txsMined[4], IexecInstance.address, "Transfer")[0].args.value, 1000);201				assert.equal(tools.extractEvents(txsMined[5], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);202				assert.equal(tools.extractEvents(txsMined[5], IexecInstance.address, "Transfer")[0].args.value, 1000);203				assert.equal(tools.extractEvents(txsMined[6], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);204				assert.equal(tools.extractEvents(txsMined[6], IexecInstance.address, "Transfer")[0].args.value, 1000);205			});206			it("balances after", async () => {207				assert.deepEqual(await appProvider.viewAccount(),     [    0, 0 ], "check balance");208				assert.deepEqual(await datasetProvider.viewAccount(), [    0, 0 ], "check balance");209				assert.deepEqual(await scheduler.viewAccount(),       [ 1000, 0 ], "check balance");210				assert.deepEqual(await worker1.viewAccount(),         [ 1000, 0 ], "check balance");211				assert.deepEqual(await worker2.viewAccount(),         [ 1000, 0 ], "check balance");212				assert.deepEqual(await worker3.viewAccount(),         [ 1000, 0 ], "check balance");213				assert.deepEqual(await worker4.viewAccount(),         [ 1000, 0 ], "check balance");214				assert.deepEqual(await worker5.viewAccount(),         [ 1000, 0 ], "check balance");215				assert.deepEqual(await user.viewAccount(),            [ 1000, 0 ], "check balance");216			});217		});218		it("score", async () => {219			assert.equal(await worker1.viewScore(), 0, "score issue");220			assert.equal(await worker2.viewScore(), 0, "score issue");221			assert.equal(await worker3.viewScore(), 0, "score issue");222			assert.equal(await worker4.viewScore(), 0, "score issue");223			assert.equal(await worker5.viewScore(), 0, "score issue");224		});225	});226	describe("â pipeline", async () => {227		describe("[0] orders", async () => {228			describe("app", async () => {229				it("sign", async () => {230					apporder = await appProvider.signAppOrder({231						app:                AppInstance.address,232						appprice:           3,233						volume:             1000,234						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",235						datasetrestrict:    constants.NULL.ADDRESS,236						workerpoolrestrict: constants.NULL.ADDRESS,237						requesterrestrict:  constants.NULL.ADDRESS,238						salt:               web3.utils.randomHex(32),239						sign:               constants.NULL.SIGNATURE,240					});241				});242				it("verify", async () => {243					assert.isTrue(await IexecInstance.verifySignature(244						appProvider.address,245						odbtools.utils.hashAppOrder(ERC712_domain, apporder),246						apporder.sign247					));248				});249			});250			describe("dataset", async () => {251				it("sign", async () => {252					datasetorder = await datasetProvider.signDatasetOrder({253						dataset:            DatasetInstance.address,254						datasetprice:       1,255						volume:             1000,256						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",257						apprestrict:        constants.NULL.ADDRESS,258						workerpoolrestrict: constants.NULL.ADDRESS,259						requesterrestrict:  constants.NULL.ADDRESS,260						salt:               web3.utils.randomHex(32),261						sign:               constants.NULL.SIGNATURE,262					});263				});264				it("verify", async () => {265					assert.isTrue(await IexecInstance.verifySignature(266						datasetProvider.address,267						odbtools.utils.hashDatasetOrder(ERC712_domain, datasetorder),268						datasetorder.sign269					));270				});271			});272			describe("workerpool", async () => {273				it("sign", async () => {274					workerpoolorder = await scheduler.signWorkerpoolOrder({275						workerpool:        WorkerpoolInstance.address,276						workerpoolprice:   25,277						volume:            3,278						category:          4,279						trust:             trusttarget,280						tag:               "0x0000000000000000000000000000000000000000000000000000000000000000",281						apprestrict:       constants.NULL.ADDRESS,282						datasetrestrict:   constants.NULL.ADDRESS,283						requesterrestrict: constants.NULL.ADDRESS,284						salt:              web3.utils.randomHex(32),285						sign:              constants.NULL.SIGNATURE,286					});287				});288				it("verify", async () => {289					assert.isTrue(await IexecInstance.verifySignature(290						scheduler.address,291						odbtools.utils.hashWorkerpoolOrder(ERC712_domain, workerpoolorder),292						workerpoolorder.sign293					));294				});295			});296			describe("request", async () => {297				it("sign", async () => {298					requestorder = await user.signRequestOrder({299						app:                AppInstance.address,300						appmaxprice:        3,301						dataset:            DatasetInstance.address,302						datasetmaxprice:    1,303						workerpool:         constants.NULL.ADDRESS,304						workerpoolmaxprice: 25,305						volume:             1, // CHANGE FOR BOT306						category:           4,307						trust:              trusttarget,308						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",309						requester:          user.address,310						beneficiary:        user.address,311						callback:           constants.NULL.ADDRESS,312						params:             "<parameters>",313						salt:               web3.utils.randomHex(32),314						sign:               constants.NULL.SIGNATURE,315					});316				});317				it("verify", async () => {318					assert.isTrue(await IexecInstance.verifySignature(319						user.address,320						odbtools.utils.hashRequestOrder(ERC712_domain, requestorder),321						requestorder.sign322					));323				});324			});325		});326		describe("[1] order matching", async () => {327			it("[TX] match", async () => {328				txMined = await IexecInstance.matchOrders(apporder, datasetorder, workerpoolorder, requestorder, { from: user.address });329				gasReceipt.push([ "matchOrders", txMined.receipt.gasUsed ]);330				dealid = web3.utils.soliditySha3(331					{ t: 'bytes32', v: odbtools.utils.hashRequestOrder(ERC712_domain, requestorder) },332					{ t: 'uint256', v: 0                                                            },333				);334				events = tools.extractEvents(txMined, IexecInstance.address, "SchedulerNotice");335				assert.equal(events[0].args.workerpool, WorkerpoolInstance.address);336				assert.equal(events[0].args.dealid,     dealid                    );337				events = tools.extractEvents(txMined, IexecInstance.address, "OrdersMatched");338				assert.equal(events[0].args.dealid,         dealid                                                            );339				assert.equal(events[0].args.appHash,        odbtools.utils.hashAppOrder       (ERC712_domain, apporder       ));340				assert.equal(events[0].args.datasetHash,    odbtools.utils.hashDatasetOrder   (ERC712_domain, datasetorder   ));341				assert.equal(events[0].args.workerpoolHash, odbtools.utils.hashWorkerpoolOrder(ERC712_domain, workerpoolorder));342				assert.equal(events[0].args.requestHash,    odbtools.utils.hashRequestOrder   (ERC712_domain, requestorder   ));343				assert.equal(events[0].args.volume,         1                                                                 );344			});345		});346		describe("[2] initialization", async () => {347			it("[TX] initialize", async () => {348				txMined = await IexecInstance.initialize(dealid, 0, { from: scheduler.address });349				gasReceipt.push([ "initialize", txMined.receipt.gasUsed ]);350				taskid = web3.utils.soliditySha3({ t: 'bytes32', v: dealid }, { t: 'uint256', v: 0 });351				events = tools.extractEvents(txMined, IexecInstance.address, "TaskInitialize");352				assert.equal(events[0].args.taskid,     taskid                    );353				assert.equal(events[0].args.workerpool, WorkerpoolInstance.address);354			});355		});356		describe("[3] contribute", async () => {357			it("authorization signature", async () => {358				for (w of workers)359				{360					const preauth                   = await scheduler.signPreAuthorization(taskid, w.agent.address);361					const [ auth, secret ]          = w.useenclave ? await broker.signAuthorization(preauth) : [ preauth, null ];362					authorizations[w.agent.address] = auth;363					secrets[w.agent.address]        = secret;364				}365			});366			it("run", async () => {367				consensus = odbtools.utils.hashConsensus(taskid, consensus);368				for (w of workers)369				{370					results[w.agent.address] = await w.agent.run(authorizations[w.agent.address], secrets[w.agent.address], w.result);371				}372			});373			it("[TX] contribute", async () => {374				for (w of workers)375				{376					txMined = await IexecInstance.contribute(377						authorizations[w.agent.address].taskid,  // task (authorization)378						results       [w.agent.address].hash,    // common    (result)379						results       [w.agent.address].seal,    // unique    (result)380						authorizations[w.agent.address].enclave, // address   (enclave)381						results       [w.agent.address].sign,    // signature (enclave)382						authorizations[w.agent.address].sign,    // signature (authorization)383						{ from: w.agent.address }384					);385					gasReceipt.push([ "contribute", txMined.receipt.gasUsed ]);386					events = tools.extractEvents(txMined, IexecInstance.address, "TaskContribute");387					assert.equal(events[0].args.taskid, authorizations[w.agent.address].taskid);388					assert.equal(events[0].args.worker, w.agent.address                       );389					assert.equal(events[0].args.hash,   results[w.agent.address].hash         );390				}391			});392		});393		describe("[4] reveal", async () => {394			it("[TX] reveal", async () => {395				for (w of workers)396				if (results[w.agent.address].hash == consensus.hash)397				{398					txMined = await IexecInstance.reveal(399						taskid,400						results[w.agent.address].digest,401						{ from: w.agent.address }402					);403					gasReceipt.push([ "reveal", txMined.receipt.gasUsed ]);404					events = tools.extractEvents(txMined, IexecInstance.address, "TaskReveal");405					assert.equal(events[0].args.taskid, taskid                         );406					assert.equal(events[0].args.worker, w.agent.address                );407					assert.equal(events[0].args.digest, results[w.agent.address].digest);408				}409			});410		});411		describe("[5] finalization", async () => {412			it("[TX] finalize", async () => {413				txMined = await IexecInstance.finalize(414					taskid,415					web3.utils.utf8ToHex("aResult"),416					"0x",417					{ from: scheduler.address }418				);419				gasReceipt.push([ "finalize", txMined.receipt.gasUsed ]);420				events = tools.extractEvents(txMined, IexecInstance.address, "TaskFinalize");421				assert.equal(events[0].args.taskid,  taskid                         );422				assert.equal(events[0].args.results, web3.utils.utf8ToHex("aResult"));423				// TODO: check 2 events by w.address for w in workers424				// How to retreive events from the IexecClerk (5 rewards and 1 seize)425			});426		});427	});428	describe("â summary", async () => {429		it("task", async () => {430			task = await IexecInstance.viewTask(taskid);431			assert.equal    (       task.status,                   constants.TaskStatusEnum.COMPLETED                                        );432			assert.equal    (       task.dealid,                   dealid                                                                    );433			assert.equal    (Number(task.idx),                     0                                                                         );434			assert.equal    (Number(task.timeref),                 (await IexecInstance.viewCategory(requestorder.category)).workClockTimeRef);...400_contributeAndCallback.js
Source:400_contributeAndCallback.js  
...105						constants.NULL.BYTES32,106						"0x",107						{ from: appProvider.address }108					);109					events = tools.extractEvents(txMined, AppRegistryInstance.address, "Transfer");110					AppInstance = await App.at(tools.BN2Address(events[0].args.tokenId));111				});112			});113			describe("dataset", async () => {114				it("create", async () => {115					txMined = await DatasetRegistryInstance.createDataset(116						datasetProvider.address,117						"Pi",118						constants.MULTIADDR_BYTES,119						constants.NULL.BYTES32,120						{ from: datasetProvider.address }121					);122					events = tools.extractEvents(txMined, DatasetRegistryInstance.address, "Transfer");123					DatasetInstance = await Dataset.at(tools.BN2Address(events[0].args.tokenId));124				});125			});126			describe("workerpool", async () => {127				it("create", async () => {128					txMined = await WorkerpoolRegistryInstance.createWorkerpool(129						scheduler.address,130						"A test workerpool",131						{ from: scheduler.address }132					);133					events = tools.extractEvents(txMined, WorkerpoolRegistryInstance.address, "Transfer");134					WorkerpoolInstance = await Workerpool.at(tools.BN2Address(events[0].args.tokenId));135				});136				it("change policy", async () => {137					txMined = await WorkerpoolInstance.changePolicy(/* worker stake ratio */ 35, /* scheduler reward ratio */ 5, { from: scheduler.address });138					events = tools.extractEvents(txMined, WorkerpoolInstance.address, "PolicyUpdate");139					assert.equal(events[0].args.oldWorkerStakeRatioPolicy,     30);140					assert.equal(events[0].args.newWorkerStakeRatioPolicy,     35);141					assert.equal(events[0].args.oldSchedulerRewardRatioPolicy,  1);142					assert.equal(events[0].args.newSchedulerRewardRatioPolicy,  5);143				});144			});145		});146		describe("tokens", async () => {147			it("balances before", async () => {148				assert.deepEqual(await appProvider.viewAccount(),     [ 0, 0 ], "check balance");149				assert.deepEqual(await datasetProvider.viewAccount(), [ 0, 0 ], "check balance");150				assert.deepEqual(await scheduler.viewAccount(),       [ 0, 0 ], "check balance");151				assert.deepEqual(await worker1.viewAccount(),         [ 0, 0 ], "check balance");152				assert.deepEqual(await worker2.viewAccount(),         [ 0, 0 ], "check balance");153				assert.deepEqual(await worker3.viewAccount(),         [ 0, 0 ], "check balance");154				assert.deepEqual(await worker4.viewAccount(),         [ 0, 0 ], "check balance");155				assert.deepEqual(await worker5.viewAccount(),         [ 0, 0 ], "check balance");156				assert.deepEqual(await user.viewAccount(),            [ 0, 0 ], "check balance");157			});158			it("deposit", async () => {159				switch (DEPLOYMENT.asset)160				{161					case "Native":162						txMined = await IexecInstance.deposit({ from: iexecAdmin.address, value: 10000000 * 10 ** 9 });163						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.from,    constants.NULL.ADDRESS);164						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.to,      iexecAdmin.address);165						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.value,   10000000);166						break;167					case "Token":168						txMined = await RLCInstance.approveAndCall(IexecInstance.address, 10000000, "0x", { from: iexecAdmin.address });169						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.owner,   iexecAdmin.address);170						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.spender, IexecInstance.address);171						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.value,   10000000);172						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.from,    iexecAdmin.address);173						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.to,      IexecInstance.address);174						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.value,   10000000);175						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.from,    constants.NULL.ADDRESS);176						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.to,      iexecAdmin.address);177						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.value,   10000000);178						break;179				}180				txsMined = await Promise.all([181					IexecInstance.transfer(scheduler.address, 1000, { from: iexecAdmin.address }),182					IexecInstance.transfer(worker1.address,   1000, { from: iexecAdmin.address }),183					IexecInstance.transfer(worker2.address,   1000, { from: iexecAdmin.address }),184					IexecInstance.transfer(worker3.address,   1000, { from: iexecAdmin.address }),185					IexecInstance.transfer(worker4.address,   1000, { from: iexecAdmin.address }),186					IexecInstance.transfer(worker5.address,   1000, { from: iexecAdmin.address }),187					IexecInstance.transfer(user.address,      1000, { from: iexecAdmin.address }),188				]);189				assert.equal(tools.extractEvents(txsMined[0], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);190				assert.equal(tools.extractEvents(txsMined[0], IexecInstance.address, "Transfer")[0].args.value, 1000);191				assert.equal(tools.extractEvents(txsMined[1], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);192				assert.equal(tools.extractEvents(txsMined[1], IexecInstance.address, "Transfer")[0].args.value, 1000);193				assert.equal(tools.extractEvents(txsMined[2], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);194				assert.equal(tools.extractEvents(txsMined[2], IexecInstance.address, "Transfer")[0].args.value, 1000);195				assert.equal(tools.extractEvents(txsMined[3], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);196				assert.equal(tools.extractEvents(txsMined[3], IexecInstance.address, "Transfer")[0].args.value, 1000);197				assert.equal(tools.extractEvents(txsMined[4], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);198				assert.equal(tools.extractEvents(txsMined[4], IexecInstance.address, "Transfer")[0].args.value, 1000);199				assert.equal(tools.extractEvents(txsMined[5], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);200				assert.equal(tools.extractEvents(txsMined[5], IexecInstance.address, "Transfer")[0].args.value, 1000);201				assert.equal(tools.extractEvents(txsMined[6], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);202				assert.equal(tools.extractEvents(txsMined[6], IexecInstance.address, "Transfer")[0].args.value, 1000);203			});204			it("balances after", async () => {205				assert.deepEqual(await appProvider.viewAccount(),     [    0, 0 ], "check balance");206				assert.deepEqual(await datasetProvider.viewAccount(), [    0, 0 ], "check balance");207				assert.deepEqual(await scheduler.viewAccount(),       [ 1000, 0 ], "check balance");208				assert.deepEqual(await worker1.viewAccount(),         [ 1000, 0 ], "check balance");209				assert.deepEqual(await worker2.viewAccount(),         [ 1000, 0 ], "check balance");210				assert.deepEqual(await worker3.viewAccount(),         [ 1000, 0 ], "check balance");211				assert.deepEqual(await worker4.viewAccount(),         [ 1000, 0 ], "check balance");212				assert.deepEqual(await worker5.viewAccount(),         [ 1000, 0 ], "check balance");213				assert.deepEqual(await user.viewAccount(),            [ 1000, 0 ], "check balance");214			});215		});216		it("score", async () => {217			assert.equal(await worker1.viewScore(), 0, "score issue");218			assert.equal(await worker2.viewScore(), 0, "score issue");219			assert.equal(await worker3.viewScore(), 0, "score issue");220			assert.equal(await worker4.viewScore(), 0, "score issue");221			assert.equal(await worker5.viewScore(), 0, "score issue");222		});223	});224	describe("â pipeline", async () => {225		describe("[0] orders", async () => {226			describe("app", async () => {227				it("sign", async () => {228					apporder = await appProvider.signAppOrder({229						app:                AppInstance.address,230						appprice:           3,231						volume:             1000,232						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",233						datasetrestrict:    constants.NULL.ADDRESS,234						workerpoolrestrict: constants.NULL.ADDRESS,235						requesterrestrict:  constants.NULL.ADDRESS,236						salt:               web3.utils.randomHex(32),237						sign:               constants.NULL.SIGNATURE,238					});239				});240				it("verify", async () => {241					assert.isTrue(await IexecInstance.verifySignature(242						appProvider.address,243						odbtools.utils.hashAppOrder(ERC712_domain, apporder),244						apporder.sign245					));246				});247			});248			describe("dataset", async () => {249				it("sign", async () => {250					datasetorder = await datasetProvider.signDatasetOrder({251						dataset:            DatasetInstance.address,252						datasetprice:       1,253						volume:             1000,254						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",255						apprestrict:        constants.NULL.ADDRESS,256						workerpoolrestrict: constants.NULL.ADDRESS,257						requesterrestrict:  constants.NULL.ADDRESS,258						salt:               web3.utils.randomHex(32),259						sign:               constants.NULL.SIGNATURE,260					});261				});262				it("verify", async () => {263					assert.isTrue(await IexecInstance.verifySignature(264						datasetProvider.address,265						odbtools.utils.hashDatasetOrder(ERC712_domain, datasetorder),266						datasetorder.sign267					));268				});269			});270			describe("workerpool", async () => {271				it("sign", async () => {272					workerpoolorder = await scheduler.signWorkerpoolOrder({273						workerpool:        WorkerpoolInstance.address,274						workerpoolprice:   25,275						volume:            3,276						category:          4,277						trust:             trusttarget,278						tag:               "0x0000000000000000000000000000000000000000000000000000000000000000",279						apprestrict:       constants.NULL.ADDRESS,280						datasetrestrict:   constants.NULL.ADDRESS,281						requesterrestrict: constants.NULL.ADDRESS,282						salt:              web3.utils.randomHex(32),283						sign:              constants.NULL.SIGNATURE,284					});285				});286				it("verify", async () => {287					assert.isTrue(await IexecInstance.verifySignature(288						scheduler.address,289						odbtools.utils.hashWorkerpoolOrder(ERC712_domain, workerpoolorder),290						workerpoolorder.sign291					));292				});293			});294			describe("request", async () => {295				it("sign", async () => {296					requestorder = await user.signRequestOrder({297						app:                AppInstance.address,298						appmaxprice:        3,299						dataset:            DatasetInstance.address,300						datasetmaxprice:    1,301						workerpool:         constants.NULL.ADDRESS,302						workerpoolmaxprice: 25,303						volume:             1, // CHANGE FOR BOT304						category:           4,305						trust:              trusttarget,306						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",307						requester:          user.address,308						beneficiary:        user.address,309						callback:           constants.NULL.ADDRESS,310						params:             "<parameters>",311						salt:               web3.utils.randomHex(32),312						sign:               constants.NULL.SIGNATURE,313					});314				});315				it("verify", async () => {316					assert.isTrue(await IexecInstance.verifySignature(317						user.address,318						odbtools.utils.hashRequestOrder(ERC712_domain, requestorder),319						requestorder.sign320					));321				});322			});323		});324		describe("[1] order matching", async () => {325			it("[TX] match", async () => {326				txMined = await IexecInstance.matchOrders(apporder, datasetorder, workerpoolorder, requestorder, { from: user.address });327				gasReceipt.push([ "matchOrders", txMined.receipt.gasUsed ]);328				dealid = web3.utils.soliditySha3(329					{ t: 'bytes32', v: odbtools.utils.hashRequestOrder(ERC712_domain, requestorder) },330					{ t: 'uint256', v: 0                                                            },331				);332				events = tools.extractEvents(txMined, IexecInstance.address, "SchedulerNotice");333				assert.equal(events[0].args.workerpool, WorkerpoolInstance.address);334				assert.equal(events[0].args.dealid,     dealid                    );335				events = tools.extractEvents(txMined, IexecInstance.address, "OrdersMatched");336				assert.equal(events[0].args.dealid,         dealid                                                            );337				assert.equal(events[0].args.appHash,        odbtools.utils.hashAppOrder       (ERC712_domain, apporder       ));338				assert.equal(events[0].args.datasetHash,    odbtools.utils.hashDatasetOrder   (ERC712_domain, datasetorder   ));339				assert.equal(events[0].args.workerpoolHash, odbtools.utils.hashWorkerpoolOrder(ERC712_domain, workerpoolorder));340				assert.equal(events[0].args.requestHash,    odbtools.utils.hashRequestOrder   (ERC712_domain, requestorder   ));341				assert.equal(events[0].args.volume,         1                                                                 );342			});343		});344		describe("[2] initialization", async () => {345			it("[TX] initialize", async () => {346				txMined = await IexecInstance.initialize(dealid, 0, { from: scheduler.address });347				gasReceipt.push([ "initialize", txMined.receipt.gasUsed ]);348				taskid = web3.utils.soliditySha3({ t: 'bytes32', v: dealid }, { t: 'uint256', v: 0 });349				events = tools.extractEvents(txMined, IexecInstance.address, "TaskInitialize");350				assert.equal(events[0].args.taskid,     taskid                    );351				assert.equal(events[0].args.workerpool, WorkerpoolInstance.address);352			});353		});354		describe("[3] contributeAndFinalize", async () => {355			it("authorization signature", async () => {356				const preauth             = await scheduler.signPreAuthorization(taskid, worker.agent.address);357				[ authorization, secret ] = worker.useenclave ? await broker.signAuthorization(preauth) : [ preauth, null ];358			});359			it("run", async () => {360				consensus = odbtools.utils.hashConsensus(taskid, consensus);361				result = await worker.agent.run(authorization, secret, worker.result);362			});363			it("[TX] contributeAndFinalize", async () => {364			txMined = await IexecInstance.contributeAndFinalize(365					authorization.taskid,            // task      (authorization)366					result.digest,                   // digest    (result)367					web3.utils.utf8ToHex("aResult"), // data      (result)368					"0x",                            // data      (callback)369					authorization.enclave,           // address   (enclave)370					result.sign,                     // signature (enclave)371					authorization.sign,              // signature (authorization)372					{ from: worker.agent.address }373				);374				gasReceipt.push([ "contributeAndFinalize", txMined.receipt.gasUsed ]);375				events = tools.extractEvents(txMined, IexecInstance.address, "TaskContribute");376				assert.equal(events[0].args.taskid, authorization.taskid);377				assert.equal(events[0].args.worker, worker.agent.address);378				assert.equal(events[0].args.hash,   result.hash         );379				events = tools.extractEvents(txMined, IexecInstance.address, "TaskConsensus");380				assert.equal(events[0].args.taskid,    taskid        );381				assert.equal(events[0].args.consensus, consensus.hash);382				events = tools.extractEvents(txMined, IexecInstance.address, "TaskReveal");383				assert.equal(events[0].args.taskid, taskid              );384				assert.equal(events[0].args.worker, worker.agent.address);385				assert.equal(events[0].args.digest, result.digest       );386				events = tools.extractEvents(txMined, IexecInstance.address, "TaskFinalize");387				assert.equal(events[0].args.taskid,  taskid                         );388				assert.equal(events[0].args.results, web3.utils.utf8ToHex("aResult"));389			});390		});391	});392	describe("â summary", async () => {393		it("task", async () => {394			task = await IexecInstance.viewTask(taskid);395			assert.equal    (       task.status,                   constants.TaskStatusEnum.COMPLETED                                        );396			assert.equal    (       task.dealid,                   dealid                                                                    );397			assert.equal    (Number(task.idx),                     0                                                                         );398			assert.equal    (Number(task.timeref),                 (await IexecInstance.viewCategory(requestorder.category)).workClockTimeRef);399			assert.isAbove  (Number(task.contributionDeadline),    0                                                                         );400			assert.isAbove  (Number(task.revealDeadline),          0                                                                         );...resultFor.js
Source:resultFor.js  
...96						constants.NULL.BYTES32,97						"0x",98						{ from: appProvider.address }99					);100					events = tools.extractEvents(txMined, AppRegistryInstance.address, "Transfer");101					AppInstance = await App.at(tools.BN2Address(events[0].args.tokenId));102				});103			});104			describe("dataset", async () => {105				it("create", async () => {106					txMined = await DatasetRegistryInstance.createDataset(107						datasetProvider.address,108						"Pi",109						constants.MULTIADDR_BYTES,110						constants.NULL.BYTES32,111						{ from: datasetProvider.address }112					);113					events = tools.extractEvents(txMined, DatasetRegistryInstance.address, "Transfer");114					DatasetInstance = await Dataset.at(tools.BN2Address(events[0].args.tokenId));115				});116			});117			describe("workerpool", async () => {118				it("create", async () => {119					txMined = await WorkerpoolRegistryInstance.createWorkerpool(120						scheduler.address,121						"A test workerpool",122						{ from: scheduler.address }123					);124					events = tools.extractEvents(txMined, WorkerpoolRegistryInstance.address, "Transfer");125					WorkerpoolInstance = await Workerpool.at(tools.BN2Address(events[0].args.tokenId));126				});127				it("change policy", async () => {128					await WorkerpoolInstance.changePolicy(/* worker stake ratio */ 35, /* scheduler reward ratio */ 5, { from: scheduler.address });129				});130			});131		});132		describe("tokens", async () => {133			it("balances before", async () => {134				assert.deepEqual(await appProvider.viewAccount(),     [ 0, 0 ], "check balance");135				assert.deepEqual(await datasetProvider.viewAccount(), [ 0, 0 ], "check balance");136				assert.deepEqual(await scheduler.viewAccount(),       [ 0, 0 ], "check balance");137				assert.deepEqual(await worker1.viewAccount(),         [ 0, 0 ], "check balance");138				assert.deepEqual(await worker2.viewAccount(),         [ 0, 0 ], "check balance");139				assert.deepEqual(await worker3.viewAccount(),         [ 0, 0 ], "check balance");140				assert.deepEqual(await worker4.viewAccount(),         [ 0, 0 ], "check balance");141				assert.deepEqual(await worker5.viewAccount(),         [ 0, 0 ], "check balance");142				assert.deepEqual(await user.viewAccount(),            [ 0, 0 ], "check balance");143			});144			it("deposit", async () => {145				switch (DEPLOYMENT.asset)146				{147					case "Native":148						txMined = await IexecInstance.deposit({ from: iexecAdmin.address, value: 10000000 * 10 ** 9 });149						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.from,    constants.NULL.ADDRESS);150						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.to,      iexecAdmin.address);151						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.value,   10000000);152						break;153					case "Token":154						txMined = await RLCInstance.approveAndCall(IexecInstance.address, 10000000, "0x", { from: iexecAdmin.address });155						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.owner,   iexecAdmin.address);156						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.spender, IexecInstance.address);157						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Approval")[0].args.value,   10000000);158						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.from,    iexecAdmin.address);159						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.to,      IexecInstance.address);160						assert.equal(tools.extractEvents(txMined, RLCInstance.address,   "Transfer")[0].args.value,   10000000);161						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.from,    constants.NULL.ADDRESS);162						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.to,      iexecAdmin.address);163						assert.equal(tools.extractEvents(txMined, IexecInstance.address, "Transfer")[0].args.value,   10000000);164						break;165				}166				txsMined = await Promise.all([167					IexecInstance.transfer(scheduler.address, 1000, { from: iexecAdmin.address }),168					IexecInstance.transfer(worker1.address,   1000, { from: iexecAdmin.address }),169					IexecInstance.transfer(worker2.address,   1000, { from: iexecAdmin.address }),170					IexecInstance.transfer(worker3.address,   1000, { from: iexecAdmin.address }),171					IexecInstance.transfer(worker4.address,   1000, { from: iexecAdmin.address }),172					IexecInstance.transfer(worker5.address,   1000, { from: iexecAdmin.address }),173					IexecInstance.transfer(user.address,      1000, { from: iexecAdmin.address }),174				]);175				assert.equal(tools.extractEvents(txsMined[0], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);176				assert.equal(tools.extractEvents(txsMined[0], IexecInstance.address, "Transfer")[0].args.value, 1000);177				assert.equal(tools.extractEvents(txsMined[1], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);178				assert.equal(tools.extractEvents(txsMined[1], IexecInstance.address, "Transfer")[0].args.value, 1000);179				assert.equal(tools.extractEvents(txsMined[2], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);180				assert.equal(tools.extractEvents(txsMined[2], IexecInstance.address, "Transfer")[0].args.value, 1000);181				assert.equal(tools.extractEvents(txsMined[3], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);182				assert.equal(tools.extractEvents(txsMined[3], IexecInstance.address, "Transfer")[0].args.value, 1000);183				assert.equal(tools.extractEvents(txsMined[4], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);184				assert.equal(tools.extractEvents(txsMined[4], IexecInstance.address, "Transfer")[0].args.value, 1000);185				assert.equal(tools.extractEvents(txsMined[5], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);186				assert.equal(tools.extractEvents(txsMined[5], IexecInstance.address, "Transfer")[0].args.value, 1000);187				assert.equal(tools.extractEvents(txsMined[6], IexecInstance.address, "Transfer")[0].args.from,  iexecAdmin.address);188				assert.equal(tools.extractEvents(txsMined[6], IexecInstance.address, "Transfer")[0].args.value, 1000);189			});190			it("balances after", async () => {191				assert.deepEqual(await appProvider.viewAccount(),     [    0, 0 ], "check balance");192				assert.deepEqual(await datasetProvider.viewAccount(), [    0, 0 ], "check balance");193				assert.deepEqual(await scheduler.viewAccount(),       [ 1000, 0 ], "check balance");194				assert.deepEqual(await worker1.viewAccount(),         [ 1000, 0 ], "check balance");195				assert.deepEqual(await worker2.viewAccount(),         [ 1000, 0 ], "check balance");196				assert.deepEqual(await worker3.viewAccount(),         [ 1000, 0 ], "check balance");197				assert.deepEqual(await worker4.viewAccount(),         [ 1000, 0 ], "check balance");198				assert.deepEqual(await worker5.viewAccount(),         [ 1000, 0 ], "check balance");199				assert.deepEqual(await user.viewAccount(),            [ 1000, 0 ], "check balance");200			});201		});202		it("score", async () => {203			assert.equal(await worker1.viewScore(), 0, "score issue");204			assert.equal(await worker2.viewScore(), 0, "score issue");205			assert.equal(await worker3.viewScore(), 0, "score issue");206			assert.equal(await worker4.viewScore(), 0, "score issue");207			assert.equal(await worker5.viewScore(), 0, "score issue");208		});209	});210	describe("â pipeline", async () => {211		describe("[0] orders", async () => {212			describe("app", async () => {213				it("sign", async () => {214					apporder = await appProvider.signAppOrder({215						app:                AppInstance.address,216						appprice:           3,217						volume:             1000,218						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",219						datasetrestrict:    constants.NULL.ADDRESS,220						workerpoolrestrict: constants.NULL.ADDRESS,221						requesterrestrict:  constants.NULL.ADDRESS,222						salt:               web3.utils.randomHex(32),223						sign:               constants.NULL.SIGNATURE,224					});225				});226				it("verify", async () => {227					assert.isTrue(await IexecInstance.verifySignature(228						appProvider.address,229						odbtools.utils.hashAppOrder(ERC712_domain, apporder),230						apporder.sign231					));232				});233			});234			describe("dataset", async () => {235				it("sign", async () => {236					datasetorder = await datasetProvider.signDatasetOrder({237						dataset:            DatasetInstance.address,238						datasetprice:       0,239						volume:             1000,240						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",241						apprestrict:        constants.NULL.ADDRESS,242						workerpoolrestrict: constants.NULL.ADDRESS,243						requesterrestrict:  constants.NULL.ADDRESS,244						salt:               web3.utils.randomHex(32),245						sign:               constants.NULL.SIGNATURE,246					});247				});248				it("verify", async () => {249					assert.isTrue(await IexecInstance.verifySignature(250						datasetProvider.address,251						odbtools.utils.hashDatasetOrder(ERC712_domain, datasetorder),252						datasetorder.sign253					));254				});255			});256			describe("workerpool", async () => {257				it("sign", async () => {258					workerpoolorder = await scheduler.signWorkerpoolOrder({259						workerpool:        WorkerpoolInstance.address,260						workerpoolprice:   25,261						volume:            1000,262						category:          4,263						trust:             0,264						tag:               "0x0000000000000000000000000000000000000000000000000000000000000000",265						apprestrict:       constants.NULL.ADDRESS,266						datasetrestrict:   constants.NULL.ADDRESS,267						requesterrestrict: constants.NULL.ADDRESS,268						salt:              web3.utils.randomHex(32),269						sign:              constants.NULL.SIGNATURE,270					});271				});272				it("verify", async () => {273					assert.isTrue(await IexecInstance.verifySignature(274						scheduler.address,275						odbtools.utils.hashWorkerpoolOrder(ERC712_domain, workerpoolorder),276						workerpoolorder.sign277					));278				});279			});280			describe("request", async () => {281				it("sign", async () => {282					requestorder = await user.signRequestOrder({283						app:                AppInstance.address,284						appmaxprice:        3,285						dataset:            DatasetInstance.address,286						datasetmaxprice:    0,287						workerpool:         constants.NULL.ADDRESS,288						workerpoolmaxprice: 25,289						volume:             10,290						tag:                "0x0000000000000000000000000000000000000000000000000000000000000000",291						category:           4,292						trust:              0,293						requester:          user.address,294						beneficiary:        user.address,295						callback:           constants.NULL.ADDRESS,296						params:             "<parameters>",297						salt:               web3.utils.randomHex(32),298						sign:               constants.NULL.SIGNATURE,299					});300				});301				it("verify", async () => {302					assert.isTrue(await IexecInstance.verifySignature(303						user.address,304						odbtools.utils.hashRequestOrder(ERC712_domain, requestorder),305						requestorder.sign306					));307				});308			});309		});310		describe("[1] order matching", async () => {311			it("[TX] match", async () => {312				await IexecInstance.matchOrders(apporder, datasetorder, workerpoolorder, requestorder, { from: user.address });313				deals = await odbtools.utils.requestToDeal(IexecInstance, odbtools.utils.hashRequestOrder(ERC712_domain, requestorder));314			});315		});316		describe("[2] initialization", async () => {317			it("[TX] initialize", async () => {318				tasks[0] = web3.utils.soliditySha3({ t: 'bytes32', v: deals[0] }, { t: 'uint256', v: 0 });                                                                                              // uninitialized319				tasks[1] = tools.extractEvents(await IexecInstance.initialize(deals[0], 1, { from: scheduler.address }), IexecInstance.address, "TaskInitialize")[0].args.taskid; // finalized320				tasks[2] = tools.extractEvents(await IexecInstance.initialize(deals[0], 2, { from: scheduler.address }), IexecInstance.address, "TaskInitialize")[0].args.taskid; // initialized321				tasks[3] = tools.extractEvents(await IexecInstance.initialize(deals[0], 3, { from: scheduler.address }), IexecInstance.address, "TaskInitialize")[0].args.taskid; // contributions322				tasks[4] = tools.extractEvents(await IexecInstance.initialize(deals[0], 4, { from: scheduler.address }), IexecInstance.address, "TaskInitialize")[0].args.taskid; // consensus323				tasks[5] = tools.extractEvents(await IexecInstance.initialize(deals[0], 5, { from: scheduler.address }), IexecInstance.address, "TaskInitialize")[0].args.taskid; // reveal324			});325		});326		async function sendContribution(worker, taskid, result, useenclave = true, callback)327		{328			const preauth          = await scheduler.signPreAuthorization(taskid, worker.address);329			const [ auth, secret ] = useenclave ? await broker.signAuthorization(preauth) : [ preauth, null ];330			const results          = await worker.run(auth, secret, result, callback);331			return IexecInstance.contribute(332				auth.taskid,  // task (authorization)333				results.hash, // common    (result)334				results.seal, // unique    (result)335				auth.enclave, // address   (enclave)336				results.sign, // signature (enclave)337				auth.sign,    // signature (authorization)...Using AI Code Generation
1const { extractEvents } = require('playwright-core/lib/server/trace/recorder');2const { chromium } = require('playwright-core');3const fs = require('fs');4(async () => {5  const browser = await chromium.launch();6  const context = await browser.newContext();7  const page = await context.newPage();8  const trace = await page.context().tracing.stop({ screenshots: true, snapshots: true });9  const events = extractEvents(trace);10  fs.writeFileSync('trace.json', JSON.stringify(events, null, 2));11  await browser.close();12})();Using AI Code Generation
1const { extractEvents } = require('@playwright/test/lib/trace/recorder/events');2const fs = require('fs');3const path = require('path');4(async () => {5  const events = await extractEvents(path.join(__dirname, 'trace.zip'));6  fs.writeFileSync(path.join(__dirname, 'trace.json'), JSON.stringify(events));7})();8const { extractEvents } = require('@playwright/test/lib/trace/recorder/events');9const fs = require('fs');10const path = require('path');11(async () => {12  const events = await extractEvents(path.join(__dirname, 'trace.zip'));13  fs.writeFileSync(path.join(__dirname, 'trace.json'), JSON.stringify(events));14})();15const { extractEvents } = require('@playwright/test/lib/trace/recorder/events');16const fs = require('fs');17const path = require('path');18(async () => {19  const events = await extractEvents(path.join(__dirname, 'trace.zip'));20  fs.writeFileSync(path.join(__dirname, 'trace.json'), JSON.stringify(events));21})();22const { extractEvents } = require('@playwright/test/lib/trace/recorder/events');23const fs = require('fs');24const path = require('path');25(async () => {26  const events = await extractEvents(path.join(__dirname, 'trace.zip'));27  fs.writeFileSync(path.join(__dirname, 'trace.json'), JSON.stringify(events));28})();29const { extractEvents } = require('@playwright/test/lib/trace/recorder/events');30const fs = require('fs');31const path = require('path');32(async () => {33  const events = await extractEvents(path.join(__dirname, 'trace.zip'));34  fs.writeFileSync(path.join(__dirname, 'trace.json'), JSON.stringify(events));35})();36const { extractEvents } = require('@playwright/test/lib/trace/recorder/events');37const fs = require('fs');Using AI Code Generation
1const { extractEvents } = require('playwright/lib/trace/viewer/traceModel');2const fs = require('fs');3const path = require('path');4const tracePath = path.join(__dirname, 'trace.zip');5const traceContent = fs.readFileSync(tracePath);6const events = extractEvents(traceContent);7console.log(events);8  {9    args: {10      data: {11      }12    }13  },14  {15    args: {16      data: {17      }18    }19  },20  {21    args: {22      data: {23      }24    }25  },26  {27    args: {28      data: {29      }30    }31  },32  {33    args: {34      data: {Using AI Code Generation
1const { extractEvents } = require('playwright/lib/server/trace/recorder/recorderApp');2const fs = require('fs');3const path = require('path');4const events = extractEvents(fs.readFileSync(path.join(__dirname, 'trace.json'), 'utf8'));5console.log(events);6  {7    viewportSize: { width: 1280, height: 720 },8  },9  {10    viewportSize: { width: 1280, height: 720 },11  },12  {13  },14  {15  },16  {17  },18  {19  },20  {21  },22  {Using AI Code Generation
1const { extractEvents } = require('playwright-core/lib/server/trace/recorder');2const fs = require('fs');3const path = require('path');4const { chromium } = require('playwright-core');5async function main() {6  const browser = await chromium.launch({7  });8  const page = await browser.newPage();9  await page.close();10  await browser.close();11  const trace = await extractEvents('trace.zip');12  fs.writeFileSync(path.join(__dirname, 'trace.json'), JSON.stringify(trace, null, 2));13}14main();15{16    {17      "args": {18        "data": {19            {20            }21        }22      },23    },24    {25      "args": {26        "data": {27        }28      },29    },30    {31      "args": {32        "data": {Using AI Code Generation
1const { extractEvents } = require('playwright/lib/server/trace/recorder/screencastFrameCollector');2const fs = require('fs');3const path = require('path');4const tracePath = path.join(__dirname, 'trace.json');5const trace = JSON.parse(fs.readFileSync(tracePath, 'utf8'));6const events = extractEvents(trace);7console.log(events);8{9    {Using AI Code Generation
1const { extractEvents } = require("@playwright/test/lib/server/trace/recorder/snapshotter");2const { chromium } = require("playwright");3const fs = require("fs");4const run = async () => {5  const browser = await chromium.launch();6  const context = await browser.newContext();7  const page = await context.newPage();8  const snapshot = await page._delegate._mainFrame._contextSnapshotter._snapshotter._snapshotter.takeSnapshot();9  const events = extractEvents(snapshot);10  fs.writeFileSync("events.json", JSON.stringify(events, null, 2));11  await browser.close();12};13run();14{15    {16      "snapshot": {17          {18            "contentType": "text/html; charset=ISO-8859-1",Using AI Code Generation
1const extractEvents = require('playwright/lib/trace/snapshotter').extractEvents;2const snapshotter = new Snapshotter(page, {3});4const events = await snapshotter.extractEvents();5console.log(events);6const snapshotter = new Snapshotter(page, {7});8const events = await snapshotter.extractEvents();9console.log(events);10const snapshotter = new Snapshotter(page, {11});12const events = await snapshotter.extractEvents();13console.log(events);14const snapshotter = new Snapshotter(page, {15});16const events = await snapshotter.extractEvents();17console.log(events);18const snapshotter = new Snapshotter(page, {Using AI Code Generation
1const { extractEvents } = require('playwright-core/lib/server/trace/recorder');2const trace = require('./trace.json');3const events = extractEvents(trace);4console.log(events);5  {6    metadata: { frameId: '0x1' }7  },8  {9    metadata: {10    }11  },12  {13    metadata: {14    }15  },16  {17    metadata: {18    }19  },20  {21    metadata: {22    }23  },24  {25    metadata: {26    }27  },28  {29    metadata: {30    }31  },32  {33    metadata: {Using AI Code Generation
1const { extractEvents } = require('@playwright/test/lib/server/trace/recorder/recorderApp');2const events = extractEvents('trace.zip');3console.log(events);4const { extractEvents } = require('@playwright/test/lib/server/trace/recorder/recorderApp');5const events = extractEvents('trace.zip');6const fs = require('fs');7fs.writeFileSync('events.json', JSON.stringify(events, null, 2));8import { test, expect } from '@playwright/test';9import { extractEvents } from '@playwright/test/lib/server/trace/recorder/recorderApp';10test('My test', async ({ page }) => {11  const events = extractEvents('trace.zip');12  await page.tracing.start({ screenshots: true, snapshots: true });13  await page.tracing.stop({ path: 'trace.zip' });14  const events2 = extractEvents('trace.zip');15  expect(events2).toEqual(events);16});17import { test, expect } from '@playwright/test';18import { extractEvents } from '@playwright/test/lib/server/trace/recorder/recorderApp';19test.beforeAll(async ({ page }) => {20  await page.tracing.start({ screenshots: true, snapshots: true });21});22test.afterAll(async ({ page }) => {23  await page.tracing.stop({ path: 'trace.zip' });24  const events = extractEvents('trace.zip');25  console.log(events);26});LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!
