mirror of
https://github.com/fluencelabs/lazy-snark
synced 2025-04-25 06:52:14 +00:00
commit
b4a28675d5
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,4 +1,5 @@
|
|||||||
build/
|
build/
|
||||||
node_modules/
|
node_modules/
|
||||||
|
bundle/
|
||||||
target/
|
target/
|
||||||
.idea/
|
.idea/
|
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"proof": {
|
"proof": {
|
||||||
"a": ["0x12d0dbcfc1da3ea29bc017288fceea3929401f4f12dbd0bba73781420d31aa2d", "0x2811c1eaa63f4a804951bd7f994cbb6bea9df64591793b8392400e8756d1bca7"],
|
"a": ["0x24d858a8ffc1766e7cccf95643f1339cb10978a5b06a6f8abad82782a3ab3efd", "0x2d0b5206a856f75a93284728f7cfa61e998868b632b11886a439add8e6150f3e"],
|
||||||
"b": [["0x04c33f68e1bd55be0928b086c647debcdf7aa0e3c3efc6a8efbc2596a77a0e67", "0x17e7392e0e3ec2b5701e675e6e0569330d03ffffe476fc8d63cfeaa0ba1c8a97"], ["0x2fc402693a54cd1b176abeed209674f2f12ced1496c6ce27ba8cf16903daa4cc", "0x2c47efba3f4f260da643bb6427d08b551bb3446537d6ac4857d611be2355a446"]],
|
"b": [["0x13e6a883986efe7bb0c6e99b00c157d31ea8479283ac6c4934e42368da31e6d8", "0x0718d8dfecf7726df8a27092bac85d58767230b33a66dd8c69ca54f576361fc1"], ["0x160f03315ee7766d576122244d12bcabd24ee3c7d33e1cb05d838337a0fd0dfb", "0x2ea4c7c18ed1b8f3544a4fb3c4d95efa5543182406fef71bfda8760e407a05c7"]],
|
||||||
"c": ["0x04d40f14694092d0f70890a20492b2b68e7eaabdcee744e519678d687c9c3ed0", "0x28de140e393154b0e70b3ef12806af963a4a33b45c24e7864391093b6028fa2b"]
|
"c": ["0x1111708b97dac3f087a3d8e13cfd513d7a82c619d39e9148080b600b7dae210e", "0x2a6e76f3003e65afefae71d3fe18ba26a3940e81463bf94615478cdf5daa2249"]
|
||||||
},
|
},
|
||||||
"inputs": ["0x00000000000000000000000000000000c6481e22c5ff4164af680b8cfaa5e8ed", "0x000000000000000000000000000000003120eeff89c4f307c4a6faaae059ce10", "0x000000000000000000000000000000005b6d7d198c48c17c9540d29275a04662", "0x00000000000000000000000000000000f7a9aa434629a33c84eec3e16e196f27", "0x0000000000000000000000000000000000000000000000000000000000000001"]
|
"inputs": ["0x00000000000000000000000000000000c6481e22c5ff4164af680b8cfaa5e8ed", "0x000000000000000000000000000000003120eeff89c4f307c4a6faaae059ce10", "0x000000000000000000000000000000005b6d7d198c48c17c9540d29275a04662", "0x00000000000000000000000000000000f7a9aa434629a33c84eec3e16e196f27", "0x0000000000000000000000000000000000000000000000000000000000000001"]
|
||||||
}
|
}
|
Binary file not shown.
@ -1,11 +1,11 @@
|
|||||||
vk.alpha = 0x2c2cb1812fb05d4f31791c66ff995d756b73162f3bb016a5c114befe5cd7903e, 0x0abc1f8a5d49cb2dbda15b5a8b7cd81bec0a581e7c2e16f79446af2d2f5340c0
|
vk.alpha = 0x2e0a814dd75e4118233ddf6a916a813c40bae07d976fdcd01dbfa22bea641a96, 0x1779e77cff5e54cf2cdc237e51cd6d95ef2c37ab6a7d5f9ce0a242188e1a1fe3
|
||||||
vk.beta = [0x071644533641f7e3acb8606328c591853b2bc27253f29bc11d008a67996fc07f, 0x26ca2720c073a085d8452aef541aac280879971c09b199a6e0f21bf36745e1d8], [0x0b17104896ed701b6d52279992c1f20d558bc0de8284087645633bf3ca1a0c98, 0x2c10eb5b6c0ca42ede8cdcf60642c6dca040abe9abb8294948f4aa0be59a0d42]
|
vk.beta = [0x021548b93199574bdef2be8cb1908a1079b1664d8a041d2e297c3aa6c554855c, 0x190b2d5d03854400e2c2a702f502813677a1d4be920d79648f810e320a30f2c5], [0x0bc956fa715451d64e20b260759c2ae74a82b68f1eef86504051cd3ae547f282, 0x011192ee83c0347e363b7c5fffe156fbadd91591b35dc8fe912d2b498c3a9301]
|
||||||
vk.gamma = [0x0afbadec2ecafdd62278c7021095660f5786f445c040e628e4ed1a410454b582, 0x038aa6f04ee254a97e2b75ea1f30e36785b6cde4dfd3a2371e058ce089b9ad51], [0x077720bb216fb0051c5e153c1bd9aa36a678173b9c13e8d3a83cb5a75ca36948, 0x1f9b58e9abde296abc3c3bab8fb0be2a4f497d8e5d9d463997d316e9cc558a7d]
|
vk.gamma = [0x1c4c46720835faf06e35cd85f05c589a1a98f58112ecf7aacf0deac60681f5a4, 0x1b438f01daf6402ff298981b74f80a5e79c39cce21c67770f74b89e65eb3b9ca], [0x101b8c9c29aa1ac1a709878f6eb4d4a74f4ed1368a18f29c2762b76b8c389f4d, 0x009538b3640e10082d0bf4b18b997fef6af2e7cceb942ebb26bd263e8805fedd]
|
||||||
vk.delta = [0x16526b9b519fa544d3f9ce35a5f4afa7aac0aa4dd54421c4864b3fe8d2415f41, 0x24e24f35699cca59416a7f43c0e93e148b2353440978994df8f81603a46f8839], [0x299f9f09280310aedf63055c5ce76feb16557ed7ff11ba35adad718102b5651a, 0x0c4a2fc4db77ef6c19511b2ffb369981cebbffcb5337a671e1ad678b460ac5e9]
|
vk.delta = [0x25161a4cc549ffabd2c4508038c12d49447c15e9c565b025183ff6114ffcc58b, 0x110f2b773f6d9632162bc2c629467a58e7539ed0f0dc64ff4fd8f63baf4b5a32], [0x0eb80be9e5a3f3f4cb0e39edc1db88dbf8de59b0c800b72dcc34d9c0fae14d55, 0x0839d69bfc27640a59af741138d4f34500d925eb1a4e9fd57fcda269a7411c33]
|
||||||
vk.gammaABC.len() = 6
|
vk.gammaABC.len() = 6
|
||||||
vk.gammaABC[0] = 0x2f910078bf5092a7ea9d3ce750b7b5399b101509adb8017a6e12fa1a4c638d5b, 0x0b76454d4300571c8d86714b4e5ef095688b51080e674425e8e5edb201f64128
|
vk.gammaABC[0] = 0x2bb604557c5f1096973ab8afe980ea3ae23bd7457f3f11f67fb395f2d1f3b568, 0x0f12fdb646ea572637ea6e1bbf04158bcabe6947cf614c67efb3f0278279f866
|
||||||
vk.gammaABC[1] = 0x2922a307d415f70c8df6f14b664c46df12a89cd3a89cf7960663907bf9483b68, 0x1bc30a719ddc0099f557cca61a0687766e6275fc98b185baa77735b93bf2a0ef
|
vk.gammaABC[1] = 0x228bbefb9d7457c97766bcae9412c6ddd1de8e3dbcf1606ca6b8f027836affee, 0x01bf2712a663f5a72a469ea83a4c3d453c6023a0cd5d5f86330157f1505d62b3
|
||||||
vk.gammaABC[2] = 0x0201dc8c8faa3dc5b8eec85f029d2482bf11a6b46d5f8e4d9f17d41ac3e4c9c1, 0x0a1d62c1142c92dff75b53d5a572fd7a013708118acf10f718c61fb6226160f5
|
vk.gammaABC[2] = 0x23af3409b4b3fb3f194dc683be70c5e442de55544edeace8f891a891a4701ca3, 0x1d13edb38da07247e70158557cfa93097d90d92b9a2c99f190c1413f3fdf8828
|
||||||
vk.gammaABC[3] = 0x02276f5896610ec573cd6cdc6e47c69e756362d2b1b1c51c5ab90ac838d1a898, 0x13fa6cc7987f4f3118f6ee3ab85dcd708df17050636d487914077348e0af05b1
|
vk.gammaABC[3] = 0x00572fbfedfe16fd1dcae266bf009907451cd8db485325ad322fb658cb0c30ff, 0x25415b150b181b2cbecc6f84382b0bd8fd49f2cf498da1c775ad624e5e7b7eaf
|
||||||
vk.gammaABC[4] = 0x0778ae3718fd7f48564bc33b60ec4f39a238e97cb4cc0bbd4ff37119942ff7d4, 0x0282e96481744ee21524d802b3e524bf0596bb37bb63e5ed37c77fc1a5c8e89d
|
vk.gammaABC[4] = 0x1a294f13fbf284a6e11c2f54ed2946fc5fd732dafbf49ac01ce741f224b57c29, 0x182d4a788849c87d27548cbe3a511a0237cb0d4595425eee878d78c4eb4e5529
|
||||||
vk.gammaABC[5] = 0x1ce40e230695bdab7d2ff7ebcf6e6fedb68d1a320238fc98845b151ae4ee3b54, 0x0feac76664d37b57a4ea5a774252bb82355294e55635a8aeb7a1327405d27128
|
vk.gammaABC[5] = 0x10ec12d1090de44b1aecb41030d123df2d61318c1928d6de10f916c9bfc2f681, 0x0621a1ea9bbbfa893358dfaa206ba1cb8af2ecca483c3c36f2a0c302da401c8f
|
@ -552,17 +552,17 @@ contract Verifier {
|
|||||||
Pairing.G1Point C;
|
Pairing.G1Point C;
|
||||||
}
|
}
|
||||||
function verifyingKey() pure internal returns (VerifyingKey memory vk) {
|
function verifyingKey() pure internal returns (VerifyingKey memory vk) {
|
||||||
vk.a = Pairing.G1Point(uint256(0x2c2cb1812fb05d4f31791c66ff995d756b73162f3bb016a5c114befe5cd7903e), uint256(0x0abc1f8a5d49cb2dbda15b5a8b7cd81bec0a581e7c2e16f79446af2d2f5340c0));
|
vk.a = Pairing.G1Point(uint256(0x2e0a814dd75e4118233ddf6a916a813c40bae07d976fdcd01dbfa22bea641a96), uint256(0x1779e77cff5e54cf2cdc237e51cd6d95ef2c37ab6a7d5f9ce0a242188e1a1fe3));
|
||||||
vk.b = Pairing.G2Point([uint256(0x071644533641f7e3acb8606328c591853b2bc27253f29bc11d008a67996fc07f), uint256(0x26ca2720c073a085d8452aef541aac280879971c09b199a6e0f21bf36745e1d8)], [uint256(0x0b17104896ed701b6d52279992c1f20d558bc0de8284087645633bf3ca1a0c98), uint256(0x2c10eb5b6c0ca42ede8cdcf60642c6dca040abe9abb8294948f4aa0be59a0d42)]);
|
vk.b = Pairing.G2Point([uint256(0x021548b93199574bdef2be8cb1908a1079b1664d8a041d2e297c3aa6c554855c), uint256(0x190b2d5d03854400e2c2a702f502813677a1d4be920d79648f810e320a30f2c5)], [uint256(0x0bc956fa715451d64e20b260759c2ae74a82b68f1eef86504051cd3ae547f282), uint256(0x011192ee83c0347e363b7c5fffe156fbadd91591b35dc8fe912d2b498c3a9301)]);
|
||||||
vk.gamma = Pairing.G2Point([uint256(0x0afbadec2ecafdd62278c7021095660f5786f445c040e628e4ed1a410454b582), uint256(0x038aa6f04ee254a97e2b75ea1f30e36785b6cde4dfd3a2371e058ce089b9ad51)], [uint256(0x077720bb216fb0051c5e153c1bd9aa36a678173b9c13e8d3a83cb5a75ca36948), uint256(0x1f9b58e9abde296abc3c3bab8fb0be2a4f497d8e5d9d463997d316e9cc558a7d)]);
|
vk.gamma = Pairing.G2Point([uint256(0x1c4c46720835faf06e35cd85f05c589a1a98f58112ecf7aacf0deac60681f5a4), uint256(0x1b438f01daf6402ff298981b74f80a5e79c39cce21c67770f74b89e65eb3b9ca)], [uint256(0x101b8c9c29aa1ac1a709878f6eb4d4a74f4ed1368a18f29c2762b76b8c389f4d), uint256(0x009538b3640e10082d0bf4b18b997fef6af2e7cceb942ebb26bd263e8805fedd)]);
|
||||||
vk.delta = Pairing.G2Point([uint256(0x16526b9b519fa544d3f9ce35a5f4afa7aac0aa4dd54421c4864b3fe8d2415f41), uint256(0x24e24f35699cca59416a7f43c0e93e148b2353440978994df8f81603a46f8839)], [uint256(0x299f9f09280310aedf63055c5ce76feb16557ed7ff11ba35adad718102b5651a), uint256(0x0c4a2fc4db77ef6c19511b2ffb369981cebbffcb5337a671e1ad678b460ac5e9)]);
|
vk.delta = Pairing.G2Point([uint256(0x25161a4cc549ffabd2c4508038c12d49447c15e9c565b025183ff6114ffcc58b), uint256(0x110f2b773f6d9632162bc2c629467a58e7539ed0f0dc64ff4fd8f63baf4b5a32)], [uint256(0x0eb80be9e5a3f3f4cb0e39edc1db88dbf8de59b0c800b72dcc34d9c0fae14d55), uint256(0x0839d69bfc27640a59af741138d4f34500d925eb1a4e9fd57fcda269a7411c33)]);
|
||||||
vk.gammaABC = new Pairing.G1Point[](6);
|
vk.gammaABC = new Pairing.G1Point[](6);
|
||||||
vk.gammaABC[0] = Pairing.G1Point(uint256(0x2f910078bf5092a7ea9d3ce750b7b5399b101509adb8017a6e12fa1a4c638d5b), uint256(0x0b76454d4300571c8d86714b4e5ef095688b51080e674425e8e5edb201f64128));
|
vk.gammaABC[0] = Pairing.G1Point(uint256(0x2bb604557c5f1096973ab8afe980ea3ae23bd7457f3f11f67fb395f2d1f3b568), uint256(0x0f12fdb646ea572637ea6e1bbf04158bcabe6947cf614c67efb3f0278279f866));
|
||||||
vk.gammaABC[1] = Pairing.G1Point(uint256(0x2922a307d415f70c8df6f14b664c46df12a89cd3a89cf7960663907bf9483b68), uint256(0x1bc30a719ddc0099f557cca61a0687766e6275fc98b185baa77735b93bf2a0ef));
|
vk.gammaABC[1] = Pairing.G1Point(uint256(0x228bbefb9d7457c97766bcae9412c6ddd1de8e3dbcf1606ca6b8f027836affee), uint256(0x01bf2712a663f5a72a469ea83a4c3d453c6023a0cd5d5f86330157f1505d62b3));
|
||||||
vk.gammaABC[2] = Pairing.G1Point(uint256(0x0201dc8c8faa3dc5b8eec85f029d2482bf11a6b46d5f8e4d9f17d41ac3e4c9c1), uint256(0x0a1d62c1142c92dff75b53d5a572fd7a013708118acf10f718c61fb6226160f5));
|
vk.gammaABC[2] = Pairing.G1Point(uint256(0x23af3409b4b3fb3f194dc683be70c5e442de55544edeace8f891a891a4701ca3), uint256(0x1d13edb38da07247e70158557cfa93097d90d92b9a2c99f190c1413f3fdf8828));
|
||||||
vk.gammaABC[3] = Pairing.G1Point(uint256(0x02276f5896610ec573cd6cdc6e47c69e756362d2b1b1c51c5ab90ac838d1a898), uint256(0x13fa6cc7987f4f3118f6ee3ab85dcd708df17050636d487914077348e0af05b1));
|
vk.gammaABC[3] = Pairing.G1Point(uint256(0x00572fbfedfe16fd1dcae266bf009907451cd8db485325ad322fb658cb0c30ff), uint256(0x25415b150b181b2cbecc6f84382b0bd8fd49f2cf498da1c775ad624e5e7b7eaf));
|
||||||
vk.gammaABC[4] = Pairing.G1Point(uint256(0x0778ae3718fd7f48564bc33b60ec4f39a238e97cb4cc0bbd4ff37119942ff7d4), uint256(0x0282e96481744ee21524d802b3e524bf0596bb37bb63e5ed37c77fc1a5c8e89d));
|
vk.gammaABC[4] = Pairing.G1Point(uint256(0x1a294f13fbf284a6e11c2f54ed2946fc5fd732dafbf49ac01ce741f224b57c29), uint256(0x182d4a788849c87d27548cbe3a511a0237cb0d4595425eee878d78c4eb4e5529));
|
||||||
vk.gammaABC[5] = Pairing.G1Point(uint256(0x1ce40e230695bdab7d2ff7ebcf6e6fedb68d1a320238fc98845b151ae4ee3b54), uint256(0x0feac76664d37b57a4ea5a774252bb82355294e55635a8aeb7a1327405d27128));
|
vk.gammaABC[5] = Pairing.G1Point(uint256(0x10ec12d1090de44b1aecb41030d123df2d61318c1928d6de10f916c9bfc2f681), uint256(0x0621a1ea9bbbfa893358dfaa206ba1cb8af2ecca483c3c36f2a0c302da401c8f));
|
||||||
}
|
}
|
||||||
function verify(uint[] memory input, Proof memory proof) internal returns (uint) {
|
function verify(uint[] memory input, Proof memory proof) internal returns (uint) {
|
||||||
VerifyingKey memory vk = verifyingKey();
|
VerifyingKey memory vk = verifyingKey();
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
<label id="challenge">Challenge?</label>
|
<label id="challenge">Challenge?</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<p> </p>
|
||||||
<div class="row 1">
|
<div class="row 1">
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
<label id="state-id-0">None</label>
|
<label id="state-id-0">None</label>
|
||||||
@ -37,9 +38,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<button type="button" class="btn btn-primary" id="challenge-0">Challenge on Fluence!</button>
|
<button type="button" class="btn btn-primary" id="challenge-0">Challenge on Fluence!</button>
|
||||||
<p><a id = "link-0" target="_blank"></a></p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<p> </p>
|
||||||
<div class="row 2">
|
<div class="row 2">
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
<label id="state-id-1">None</label>
|
<label id="state-id-1">None</label>
|
||||||
@ -49,9 +50,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<button type="button" class="btn btn-primary" id="challenge-1">Challenge on Fluence!</button>
|
<button type="button" class="btn btn-primary" id="challenge-1">Challenge on Fluence!</button>
|
||||||
<p><a id = "link-1" target="_blank"></a></p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<p> </p>
|
||||||
<div class="row 3">
|
<div class="row 3">
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
<label id="state-id-2">None</label>
|
<label id="state-id-2">None</label>
|
||||||
@ -61,10 +62,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<button type="button" class="btn btn-primary" id="challenge-2">Challenge on Fluence!</button>
|
<button type="button" class="btn btn-primary" id="challenge-2">Challenge on Fluence!</button>
|
||||||
<p><a id = "link-2" target="_blank"></a></p>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<p> </p>
|
||||||
<div class="row 4">
|
<div class="row 4">
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
<label id="state-id-3">None</label>
|
<label id="state-id-3">None</label>
|
||||||
@ -74,9 +74,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<button type="button" class="btn btn-primary" id="challenge-3">Challenge on Fluence!</button>
|
<button type="button" class="btn btn-primary" id="challenge-3">Challenge on Fluence!</button>
|
||||||
<p><a id = "link-3" target="_blank"></a></p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<p> </p>
|
||||||
<div class="row 5">
|
<div class="row 5">
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
<label id="state-id-4">None</label>
|
<label id="state-id-4">None</label>
|
||||||
@ -86,7 +86,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<button type="button" class="btn btn-primary" id="challenge-4">Challenge on Fluence!</button>
|
<button type="button" class="btn btn-primary" id="challenge-4">Challenge on Fluence!</button>
|
||||||
<p><a id = "link-4" target="_blank"></a></p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -8,22 +8,22 @@ window.getResultAsString = function (result) {
|
|||||||
|
|
||||||
var contractInstance;
|
var contractInstance;
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(async function() {
|
||||||
let contractAddress = "0xeFF91455de6D4CF57C141bD8bF819E5f873c1A01";
|
let contractAddress = "0xeFF91455de6D4CF57C141bD8bF819E5f873c1A01";
|
||||||
|
|
||||||
// set ethUrl to `undefined` to use MetaMask instead of Ethereum node
|
// set ethUrl to `undefined` to use MetaMask instead of Ethereum node
|
||||||
let ethUrl = "http://rinkeby.fluence.one:8545/";
|
let ethUrl = "http://rinkeby.fluence.one:8545/";
|
||||||
|
|
||||||
// application to interact with that stored in Fluence contract
|
// application to interact with that stored in Fluence contract
|
||||||
let appId = "264";
|
let appId = "269";
|
||||||
|
|
||||||
// create a session between client and backend application, and then join the game
|
// create a session between client and backend application, and then join the game
|
||||||
fluence.connect(contractAddress, appId, ethUrl).then((s) => {
|
await fluence.connect(contractAddress, appId, ethUrl).then((s) => {
|
||||||
console.log("Session created");
|
console.log("Session created");
|
||||||
window.session = s;
|
window.session = s;
|
||||||
});
|
});
|
||||||
|
|
||||||
var lazyAddress = '0x1cca1f0be338c747b11a16aba8d0905251628bdf';
|
var lazyAddress = '0x4812b51D4420Da87C3cD78a77048328cd6914f27';
|
||||||
let ControllerAbi = [
|
let ControllerAbi = [
|
||||||
{
|
{
|
||||||
"constant": true,
|
"constant": true,
|
||||||
@ -430,8 +430,8 @@ $('button').click(function () {
|
|||||||
function challengeEthereum(id, data) {
|
function challengeEthereum(id, data) {
|
||||||
console.log('Challenging task N ' + data + ' on Ethereum!');
|
console.log('Challenging task N ' + data + ' on Ethereum!');
|
||||||
contractInstance.challenge.sendTransaction(data, function (err, txHash) {
|
contractInstance.challenge.sendTransaction(data, function (err, txHash) {
|
||||||
$('#challenge-' + id).remove();
|
if (!err) {
|
||||||
$('#link-' + id).text('See tx on Etherscan!').attr("href", "https://rinkeby.etherscan.io/tx/" + txHash);
|
$('#challenge-' + id).text('See tx on Etherscan!').attr("onclick", "window.open('https://rinkeby.etherscan.io/tx/" + txHash + "')");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "frontend-challenger",
|
"name": "lazy-snark-frontend",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
pragma solidity ^0.5.4;
|
pragma solidity 0.5.10;
|
||||||
pragma experimental ABIEncoderV2;
|
pragma experimental ABIEncoderV2;
|
||||||
|
|
||||||
import "./Structs.sol";
|
import "./Structs.sol";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
pragma solidity ^0.5.4;
|
pragma solidity 0.5.10;
|
||||||
pragma experimental ABIEncoderV2;
|
pragma experimental ABIEncoderV2;
|
||||||
|
|
||||||
import "./IVerifier.sol";
|
import "./IVerifier.sol";
|
||||||
@ -72,9 +72,7 @@ contract Lazy is Structs {
|
|||||||
msg.sender.transfer(stake);
|
msg.sender.transfer(stake);
|
||||||
}
|
}
|
||||||
|
|
||||||
function taskDataById(uint id) external view returns(
|
function taskDataById(uint id) external view returns(uint[13] memory data) {
|
||||||
uint[13] memory data
|
|
||||||
) {
|
|
||||||
Task memory task = tasks[id];
|
Task memory task = tasks[id];
|
||||||
|
|
||||||
data[0] = task.data.input[0];
|
data[0] = task.data.input[0];
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
pragma solidity ^0.5.4;
|
pragma solidity 0.5.10;
|
||||||
|
|
||||||
interface Structs {
|
interface Structs {
|
||||||
struct Data {
|
struct Data {
|
||||||
|
@ -552,17 +552,17 @@ contract Verifier {
|
|||||||
Pairing.G1Point C;
|
Pairing.G1Point C;
|
||||||
}
|
}
|
||||||
function verifyingKey() pure internal returns (VerifyingKey memory vk) {
|
function verifyingKey() pure internal returns (VerifyingKey memory vk) {
|
||||||
vk.a = Pairing.G1Point(uint256(0x2c2cb1812fb05d4f31791c66ff995d756b73162f3bb016a5c114befe5cd7903e), uint256(0x0abc1f8a5d49cb2dbda15b5a8b7cd81bec0a581e7c2e16f79446af2d2f5340c0));
|
vk.a = Pairing.G1Point(uint256(0x2e0a814dd75e4118233ddf6a916a813c40bae07d976fdcd01dbfa22bea641a96), uint256(0x1779e77cff5e54cf2cdc237e51cd6d95ef2c37ab6a7d5f9ce0a242188e1a1fe3));
|
||||||
vk.b = Pairing.G2Point([uint256(0x071644533641f7e3acb8606328c591853b2bc27253f29bc11d008a67996fc07f), uint256(0x26ca2720c073a085d8452aef541aac280879971c09b199a6e0f21bf36745e1d8)], [uint256(0x0b17104896ed701b6d52279992c1f20d558bc0de8284087645633bf3ca1a0c98), uint256(0x2c10eb5b6c0ca42ede8cdcf60642c6dca040abe9abb8294948f4aa0be59a0d42)]);
|
vk.b = Pairing.G2Point([uint256(0x021548b93199574bdef2be8cb1908a1079b1664d8a041d2e297c3aa6c554855c), uint256(0x190b2d5d03854400e2c2a702f502813677a1d4be920d79648f810e320a30f2c5)], [uint256(0x0bc956fa715451d64e20b260759c2ae74a82b68f1eef86504051cd3ae547f282), uint256(0x011192ee83c0347e363b7c5fffe156fbadd91591b35dc8fe912d2b498c3a9301)]);
|
||||||
vk.gamma = Pairing.G2Point([uint256(0x0afbadec2ecafdd62278c7021095660f5786f445c040e628e4ed1a410454b582), uint256(0x038aa6f04ee254a97e2b75ea1f30e36785b6cde4dfd3a2371e058ce089b9ad51)], [uint256(0x077720bb216fb0051c5e153c1bd9aa36a678173b9c13e8d3a83cb5a75ca36948), uint256(0x1f9b58e9abde296abc3c3bab8fb0be2a4f497d8e5d9d463997d316e9cc558a7d)]);
|
vk.gamma = Pairing.G2Point([uint256(0x1c4c46720835faf06e35cd85f05c589a1a98f58112ecf7aacf0deac60681f5a4), uint256(0x1b438f01daf6402ff298981b74f80a5e79c39cce21c67770f74b89e65eb3b9ca)], [uint256(0x101b8c9c29aa1ac1a709878f6eb4d4a74f4ed1368a18f29c2762b76b8c389f4d), uint256(0x009538b3640e10082d0bf4b18b997fef6af2e7cceb942ebb26bd263e8805fedd)]);
|
||||||
vk.delta = Pairing.G2Point([uint256(0x16526b9b519fa544d3f9ce35a5f4afa7aac0aa4dd54421c4864b3fe8d2415f41), uint256(0x24e24f35699cca59416a7f43c0e93e148b2353440978994df8f81603a46f8839)], [uint256(0x299f9f09280310aedf63055c5ce76feb16557ed7ff11ba35adad718102b5651a), uint256(0x0c4a2fc4db77ef6c19511b2ffb369981cebbffcb5337a671e1ad678b460ac5e9)]);
|
vk.delta = Pairing.G2Point([uint256(0x25161a4cc549ffabd2c4508038c12d49447c15e9c565b025183ff6114ffcc58b), uint256(0x110f2b773f6d9632162bc2c629467a58e7539ed0f0dc64ff4fd8f63baf4b5a32)], [uint256(0x0eb80be9e5a3f3f4cb0e39edc1db88dbf8de59b0c800b72dcc34d9c0fae14d55), uint256(0x0839d69bfc27640a59af741138d4f34500d925eb1a4e9fd57fcda269a7411c33)]);
|
||||||
vk.gammaABC = new Pairing.G1Point[](6);
|
vk.gammaABC = new Pairing.G1Point[](6);
|
||||||
vk.gammaABC[0] = Pairing.G1Point(uint256(0x2f910078bf5092a7ea9d3ce750b7b5399b101509adb8017a6e12fa1a4c638d5b), uint256(0x0b76454d4300571c8d86714b4e5ef095688b51080e674425e8e5edb201f64128));
|
vk.gammaABC[0] = Pairing.G1Point(uint256(0x2bb604557c5f1096973ab8afe980ea3ae23bd7457f3f11f67fb395f2d1f3b568), uint256(0x0f12fdb646ea572637ea6e1bbf04158bcabe6947cf614c67efb3f0278279f866));
|
||||||
vk.gammaABC[1] = Pairing.G1Point(uint256(0x2922a307d415f70c8df6f14b664c46df12a89cd3a89cf7960663907bf9483b68), uint256(0x1bc30a719ddc0099f557cca61a0687766e6275fc98b185baa77735b93bf2a0ef));
|
vk.gammaABC[1] = Pairing.G1Point(uint256(0x228bbefb9d7457c97766bcae9412c6ddd1de8e3dbcf1606ca6b8f027836affee), uint256(0x01bf2712a663f5a72a469ea83a4c3d453c6023a0cd5d5f86330157f1505d62b3));
|
||||||
vk.gammaABC[2] = Pairing.G1Point(uint256(0x0201dc8c8faa3dc5b8eec85f029d2482bf11a6b46d5f8e4d9f17d41ac3e4c9c1), uint256(0x0a1d62c1142c92dff75b53d5a572fd7a013708118acf10f718c61fb6226160f5));
|
vk.gammaABC[2] = Pairing.G1Point(uint256(0x23af3409b4b3fb3f194dc683be70c5e442de55544edeace8f891a891a4701ca3), uint256(0x1d13edb38da07247e70158557cfa93097d90d92b9a2c99f190c1413f3fdf8828));
|
||||||
vk.gammaABC[3] = Pairing.G1Point(uint256(0x02276f5896610ec573cd6cdc6e47c69e756362d2b1b1c51c5ab90ac838d1a898), uint256(0x13fa6cc7987f4f3118f6ee3ab85dcd708df17050636d487914077348e0af05b1));
|
vk.gammaABC[3] = Pairing.G1Point(uint256(0x00572fbfedfe16fd1dcae266bf009907451cd8db485325ad322fb658cb0c30ff), uint256(0x25415b150b181b2cbecc6f84382b0bd8fd49f2cf498da1c775ad624e5e7b7eaf));
|
||||||
vk.gammaABC[4] = Pairing.G1Point(uint256(0x0778ae3718fd7f48564bc33b60ec4f39a238e97cb4cc0bbd4ff37119942ff7d4), uint256(0x0282e96481744ee21524d802b3e524bf0596bb37bb63e5ed37c77fc1a5c8e89d));
|
vk.gammaABC[4] = Pairing.G1Point(uint256(0x1a294f13fbf284a6e11c2f54ed2946fc5fd732dafbf49ac01ce741f224b57c29), uint256(0x182d4a788849c87d27548cbe3a511a0237cb0d4595425eee878d78c4eb4e5529));
|
||||||
vk.gammaABC[5] = Pairing.G1Point(uint256(0x1ce40e230695bdab7d2ff7ebcf6e6fedb68d1a320238fc98845b151ae4ee3b54), uint256(0x0feac76664d37b57a4ea5a774252bb82355294e55635a8aeb7a1327405d27128));
|
vk.gammaABC[5] = Pairing.G1Point(uint256(0x10ec12d1090de44b1aecb41030d123df2d61318c1928d6de10f916c9bfc2f681), uint256(0x0621a1ea9bbbfa893358dfaa206ba1cb8af2ecca483c3c36f2a0c302da401c8f));
|
||||||
}
|
}
|
||||||
function verify(uint[] memory input, Proof memory proof) internal returns (uint) {
|
function verify(uint[] memory input, Proof memory proof) internal returns (uint) {
|
||||||
VerifyingKey memory vk = verifyingKey();
|
VerifyingKey memory vk = verifyingKey();
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
pragma solidity ^0.5.4;
|
pragma solidity 0.5.10;
|
||||||
pragma experimental ABIEncoderV2;
|
pragma experimental ABIEncoderV2;
|
||||||
|
|
||||||
import "./IVerifier.sol";
|
import "./IVerifier.sol";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
const Migrations = artifacts.require("Migrations");
|
const Migrations = artifacts.require("./Migrations.sol");
|
||||||
|
|
||||||
module.exports = function(deployer) {
|
module.exports = function(deployer) {
|
||||||
deployer.deploy(Migrations);
|
deployer.deploy(Migrations);
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
var Verifier = artifacts.require('Verifier');
|
var Verifier = artifacts.require('./Verifier.sol');
|
||||||
var VerifierProxy = artifacts.require('VerifierProxy');
|
var VerifierProxy = artifacts.require('./VerifierProxy.sol');
|
||||||
var Lazy = artifacts.require('Lazy');
|
var Lazy = artifacts.require('./Lazy.sol');
|
||||||
|
|
||||||
|
const proof1 = [["0x24d858a8ffc1766e7cccf95643f1339cb10978a5b06a6f8abad82782a3ab3efd", "0x2d0b5206a856f75a93284728f7cfa61e998868b632b11886a439add8e6150f3e"],[["0x13e6a883986efe7bb0c6e99b00c157d31ea8479283ac6c4934e42368da31e6d8", "0x0718d8dfecf7726df8a27092bac85d58767230b33a66dd8c69ca54f576361fc1"], ["0x160f03315ee7766d576122244d12bcabd24ee3c7d33e1cb05d838337a0fd0dfb", "0x2ea4c7c18ed1b8f3544a4fb3c4d95efa5543182406fef71bfda8760e407a05c7"]],["0x1111708b97dac3f087a3d8e13cfd513d7a82c619d39e9148080b600b7dae210e", "0x2a6e76f3003e65afefae71d3fe18ba26a3940e81463bf94615478cdf5daa2249"]];
|
||||||
|
const input1 = [["0x00000000000000000000000000000000c6481e22c5ff4164af680b8cfaa5e8ed", "0x000000000000000000000000000000003120eeff89c4f307c4a6faaae059ce10", "0x000000000000000000000000000000005b6d7d198c48c17c9540d29275a04662", "0x00000000000000000000000000000000f7a9aa434629a33c84eec3e16e196f27", "0x0000000000000000000000000000000000000000000000000000000000000001"]];
|
||||||
|
|
||||||
const proof1 = [["0x12d0dbcfc1da3ea29bc017288fceea3929401f4f12dbd0bba73781420d31aa2d","0x2811c1eaa63f4a804951bd7f994cbb6bea9df64591793b8392400e8756d1bca7"],[["0x04c33f68e1bd55be0928b086c647debcdf7aa0e3c3efc6a8efbc2596a77a0e67","0x17e7392e0e3ec2b5701e675e6e0569330d03ffffe476fc8d63cfeaa0ba1c8a97"],["0x2fc402693a54cd1b176abeed209674f2f12ced1496c6ce27ba8cf16903daa4cc","0x2c47efba3f4f260da643bb6427d08b551bb3446537d6ac4857d611be2355a446"]],["0x04d40f14694092d0f70890a20492b2b68e7eaabdcee744e519678d687c9c3ed0","0x28de140e393154b0e70b3ef12806af963a4a33b45c24e7864391093b6028fa2b"]]
|
|
||||||
const input1 = [["0x00000000000000000000000000000000c6481e22c5ff4164af680b8cfaa5e8ed","0x000000000000000000000000000000003120eeff89c4f307c4a6faaae059ce10","0x000000000000000000000000000000005b6d7d198c48c17c9540d29275a04662","0x00000000000000000000000000000000f7a9aa434629a33c84eec3e16e196f27","0x0000000000000000000000000000000000000000000000000000000000000001"]]
|
|
||||||
module.exports = async function(deployer, network, accounts) {
|
module.exports = async function(deployer, network, accounts) {
|
||||||
deployer.then(async() => {
|
deployer.then(async() => {
|
||||||
await deployer.deploy(Verifier)
|
await deployer.deploy(Verifier);
|
||||||
await deployer.deploy(VerifierProxy, Verifier.address)
|
await deployer.deploy(VerifierProxy, Verifier.address);
|
||||||
var contract = await deployer.deploy(Lazy, VerifierProxy.address)
|
var contract = await deployer.deploy(Lazy, VerifierProxy.address);
|
||||||
await contract.submit([[1,2,3,4,5]],[[1,2],[[3,4],[5,6]],[7,8]])
|
await contract.submit([[1, 2, 3, 4, 5]], [[1, 2], [[3, 4], [5, 6]], [7, 8]]);
|
||||||
await contract.submit(input1,proof1)
|
await contract.submit(input1, proof1);
|
||||||
|
});
|
||||||
})
|
};
|
||||||
}
|
|
||||||
|
@ -1,22 +1,22 @@
|
|||||||
{
|
{
|
||||||
"name": "testsuite-contract",
|
"name": "lazy-snark",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "truffle-config.js",
|
"main": "truffle.js",
|
||||||
"directories": {
|
"directories": {
|
||||||
"test": "test"
|
"test": "test"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"any-promise": "^1.3.0",
|
||||||
"babel-polyfill": "^6.26.0",
|
"babel-polyfill": "^6.26.0",
|
||||||
"babel-register": "^6.26.0",
|
"babel-register": "^6.26.0",
|
||||||
|
"bindings": "^1.5.0",
|
||||||
"ganache-cli": "^6.4.1",
|
"ganache-cli": "^6.4.1",
|
||||||
"openzeppelin-solidity": "^2.1.3",
|
"truffle": "5.0.25",
|
||||||
"truffle": "5.0.8",
|
"truffle-hdwallet-provider": "^1.0.0-web3one.5"
|
||||||
"truffle-hdwallet-provider": "1.0.5"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {},
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "./node_modules/.bin/truffle test"
|
||||||
},
|
},
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
|
@ -19,20 +19,29 @@ contract("Testing Lazy", accounts => {
|
|||||||
assert.equal(task.status, 2);
|
assert.equal(task.status, 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should pass correct proof", async () => {
|
||||||
|
let instance = await Lazy.deployed();
|
||||||
|
let task = await instance.tasks(1);
|
||||||
|
assert.equal(task.status, 0);
|
||||||
|
await instance.challenge(1);
|
||||||
|
task = await instance.tasks(1);
|
||||||
|
assert.equal(task.status, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
contract("Testing Verifier", accounts => {
|
contract("Testing Verifier", accounts => {
|
||||||
const a = ["0x12d0dbcfc1da3ea29bc017288fceea3929401f4f12dbd0bba73781420d31aa2d", "0x2811c1eaa63f4a804951bd7f994cbb6bea9df64591793b8392400e8756d1bca7"];
|
const a = ["0x12d0dbcfc1da3ea29bc017288fceea3929401f4f12dbd0bba73781420d31aa2d", "0x2811c1eaa63f4a804951bd7f994cbb6bea9df64591793b8392400e8756d1bca7"];
|
||||||
const b = [["0x04c33f68e1bd55be0928b086c647debcdf7aa0e3c3efc6a8efbc2596a77a0e67", "0x17e7392e0e3ec2b5701e675e6e0569330d03ffffe476fc8d63cfeaa0ba1c8a97"], ["0x2fc402693a54cd1b176abeed209674f2f12ced1496c6ce27ba8cf16903daa4cc", "0x2c47efba3f4f260da643bb6427d08b551bb3446537d6ac4857d611be2355a446"]];
|
const b = [["0x04c33f68e1bd55be0928b086c647debcdf7aa0e3c3efc6a8efbc2596a77a0e67", "0x17e7392e0e3ec2b5701e675e6e0569330d03ffffe476fc8d63cfeaa0ba1c8a97"], ["0x2fc402693a54cd1b176abeed209674f2f12ced1496c6ce27ba8cf16903daa4cc", "0x2c47efba3f4f260da643bb6427d08b551bb3446537d6ac4857d611be2355a446"]];
|
||||||
const c = ["0x04d40f14694092d0f70890a20492b2b68e7eaabdcee744e519678d687c9c3ed0", "0x28de140e393154b0e70b3ef12806af963a4a33b45c24e7864391093b6028fa2b"];
|
const c = ["0x04d40f14694092d0f70890a20492b2b68e7eaabdcee744e519678d687c9c3ed0", "0x28de140e393154b0e70b3ef12806af963a4a33b45c24e7864391093b6028fa2b"];
|
||||||
const input = ["0x00000000000000000000000000000000c6481e22c5ff4164af680b8cfaa5e8ed","0x000000000000000000000000000000003120eeff89c4f307c4a6faaae059ce10","0x000000000000000000000000000000005b6d7d198c48c17c9540d29275a04662","0x00000000000000000000000000000000f7a9aa434629a33c84eec3e16e196f27","0x0000000000000000000000000000000000000000000000000000000000000001"]
|
const input = ["0x00000000000000000000000000000000c6481e22c5ff4164af680b8cfaa5e8ed", "0x000000000000000000000000000000003120eeff89c4f307c4a6faaae059ce10", "0x000000000000000000000000000000005b6d7d198c48c17c9540d29275a04662", "0x00000000000000000000000000000000f7a9aa434629a33c84eec3e16e196f27", "0x0000000000000000000000000000000000000000000000000000000000000001"];
|
||||||
|
|
||||||
it("should process proofs", async () => {
|
it("should process proofs", async () => {
|
||||||
let instance = await Verifier.deployed();
|
let instance = await Verifier.deployed();
|
||||||
let result = await instance.verifyTx.call(a,b,c,input);
|
let result = await instance.verifyTx.call(a,b,c,input);
|
||||||
console.log("verfifier thinks that result is " + result)
|
console.log("verfifier thinks that result is " + result)
|
||||||
// assert.equal(result.valueOf(), false);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
@ -1,51 +1,29 @@
|
|||||||
/*require('babel-register');
|
require('babel-register');
|
||||||
require('babel-polyfill');
|
require('babel-polyfill');
|
||||||
*/
|
|
||||||
var HDWalletProvider = require("truffle-hdwallet-provider");
|
var HDWalletProvider = require("truffle-hdwallet-provider");
|
||||||
|
|
||||||
var mnemonicRopsten = "...";
|
var mnemonicRinkeby = "oxygen crunch note tent verify chicken gossip shield essence runway clinic fortune";
|
||||||
var infuraLinkRopsten = "...";
|
var infuraLinkRinkeby = "https://rinkeby.infura.io/v3/198f519e2d9643d689649459edccc350";
|
||||||
var deployerAddressRopsten = "...";
|
|
||||||
|
|
||||||
var mnemonicKovan = "...";
|
|
||||||
var infuraLinkKovan = "...";
|
|
||||||
var deployerAddressKovan = "...";
|
|
||||||
var addressIndex = 0; // address index in MetaMask
|
|
||||||
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
networks: {
|
networks: {
|
||||||
|
rinkeby: {
|
||||||
|
provider: function() {
|
||||||
|
return new HDWalletProvider(mnemonicRinkeby, infuraLinkRinkeby, 1)
|
||||||
|
},
|
||||||
|
from : "0x6d92a2d06758E014Da0C98d0bBBE9Ed78E964f34".toLowerCase(),
|
||||||
|
network_id: 4
|
||||||
|
},
|
||||||
development: {
|
development: {
|
||||||
host: "localhost",
|
host: "127.0.0.1",
|
||||||
network_id: "*",
|
|
||||||
port: 8545,
|
port: 8545,
|
||||||
},
|
network_id: "*"
|
||||||
coverage: {
|
|
||||||
host: "localhost",
|
|
||||||
network_id: "*",
|
|
||||||
port: 8555, // <-- If you change this, also set the port option in .solcover.js.
|
|
||||||
gas: 0xfffffffffff, // <-- Use this high gas value
|
|
||||||
gasPrice: 0x01 // <-- Use this low gas price
|
|
||||||
},
|
|
||||||
ropsten: {
|
|
||||||
provider: function() {
|
|
||||||
return new HDWalletProvider(mnemonicRopsten, infuraLinkRopsten, addressIndex);
|
|
||||||
},
|
|
||||||
network_id: 3,
|
|
||||||
from: deployerAddressRopsten.toLowerCase(),
|
|
||||||
},
|
|
||||||
kovan: {
|
|
||||||
provider: function() {
|
|
||||||
return new HDWalletProvider(mnemonicKovan, infuraLinkKovan, addressIndex);
|
|
||||||
},
|
|
||||||
network_id: 42,
|
|
||||||
from: deployerAddressKovan.toLowerCase(),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
compilers: {
|
compilers: {
|
||||||
solc: {
|
solc: {
|
||||||
version: "0.5.4",
|
version: "0.5.10",
|
||||||
settings: {
|
settings: {
|
||||||
optimizer: {
|
optimizer: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
@ -54,6 +32,4 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// See <http://truffleframework.com/docs/advanced/configuration>
|
|
||||||
// to customize your Truffle configuration!
|
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user