UNPKG

@gnosis.pm/conditional-tokens-contracts

Version:

Collection of smart contracts for the conditional tokens

1 lines 20.9 kB
{"contractName":"CTHelpers","abi":[],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/CTHelpers.sol\":\"CTHelpers\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/C/Users/Alan/Documents/GitHub/conditional-tokens-contracts/contracts/CTHelpers.sol\":{\"keccak256\":\"0x921eadb1d6cd0e742448334fb84c39b358a18cdeb7c6badbb89cae847d44a201\",\"urls\":[\"bzzr://54ea8cd3a2ef100710306ce15475573542ad5235ced471d59fa1744cfaea51c8\",\"dweb:/ipfs/Qme871evGa1PBSBnV9PisLhYnFnnahLmBuy5KakLSUKRPF\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x90e8c2521653bbb1768b05889c5760031e688d9cd361f167489b89215e201b95\",\"urls\":[\"bzzr://aa8b45b57edafc3d67bc5d916327ea16807fae33f753ca163ae0c4061b789766\",\"dweb:/ipfs/QmP5NaEwZthQeM2ESz4WTT3osrP7jhbvu7ocbttBi2JAw6\"]}},\"version\":1}","bytecode":"0x60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72305820c2ebe3f8ff4842757c5ae5e604218795c007986e70d8d26757b27a953b2f3afd64736f6c634300050a0032","deployedBytecode":"0x73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a72305820c2ebe3f8ff4842757c5ae5e604218795c007986e70d8d26757b27a953b2f3afd64736f6c634300050a0032","sourceMap":"107:18313:0:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24","deployedSourceMap":"107:18313:0:-;;;;;;;;","source":"pragma solidity ^0.5.1;\n\nimport { IERC20 } from \"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\";\n\nlibrary CTHelpers {\n /// @dev Constructs a condition ID from an oracle, a question ID, and the outcome slot count for the question.\n /// @param oracle The account assigned to report the result for the prepared condition.\n /// @param questionId An identifier for the question to be answered by the oracle.\n /// @param outcomeSlotCount The number of outcome slots which should be used for this condition. Must not exceed 256.\n function getConditionId(address oracle, bytes32 questionId, uint outcomeSlotCount) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(oracle, questionId, outcomeSlotCount));\n }\n\n uint constant P = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n uint constant B = 3;\n\n function sqrt(uint x) private pure returns (uint y) {\n uint p = P;\n // solium-disable-next-line security/no-inline-assembly\n assembly {\n // add chain generated via https://crypto.stackexchange.com/q/27179/71252\n // and transformed to the following program:\n\n // x=1; y=x+x; z=y+y; z=z+z; y=y+z; x=x+y; y=y+x; z=y+y; t=z+z; t=z+t; t=t+t;\n // t=t+t; z=z+t; x=x+z; z=x+x; z=z+z; y=y+z; z=y+y; z=z+z; z=z+z; z=y+z; x=x+z;\n // z=x+x; z=z+z; z=z+z; z=x+z; y=y+z; x=x+y; z=x+x; z=z+z; y=y+z; z=y+y; t=z+z;\n // t=t+t; t=t+t; z=z+t; x=x+z; y=y+x; z=y+y; z=z+z; z=z+z; x=x+z; z=x+x; z=z+z;\n // z=x+z; z=z+z; z=z+z; z=x+z; y=y+z; z=y+y; t=z+z; t=t+t; t=z+t; t=y+t; t=t+t;\n // t=t+t; t=t+t; t=t+t; z=z+t; x=x+z; z=x+x; z=x+z; y=y+z; z=y+y; z=y+z; z=z+z;\n // t=z+z; t=z+t; w=t+t; w=w+w; w=w+w; w=w+w; w=w+w; t=t+w; z=z+t; x=x+z; y=y+x;\n // z=y+y; x=x+z; y=y+x; x=x+y; y=y+x; x=x+y; z=x+x; z=x+z; z=z+z; y=y+z; z=y+y;\n // z=z+z; x=x+z; y=y+x; z=y+y; z=y+z; x=x+z; y=y+x; x=x+y; y=y+x; z=y+y; z=z+z;\n // z=y+z; x=x+z; z=x+x; z=x+z; y=y+z; x=x+y; y=y+x; x=x+y; y=y+x; z=y+y; z=y+z;\n // z=z+z; x=x+z; y=y+x; z=y+y; z=y+z; z=z+z; x=x+z; z=x+x; t=z+z; t=t+t; t=z+t;\n // t=x+t; t=t+t; t=t+t; t=t+t; t=t+t; z=z+t; y=y+z; x=x+y; y=y+x; x=x+y; z=x+x;\n // z=x+z; z=z+z; z=z+z; z=z+z; z=x+z; y=y+z; z=y+y; z=y+z; z=z+z; x=x+z; z=x+x;\n // z=x+z; y=y+z; x=x+y; z=x+x; z=z+z; y=y+z; x=x+y; z=x+x; y=y+z; x=x+y; y=y+x;\n // z=y+y; z=y+z; x=x+z; y=y+x; z=y+y; z=y+z; z=z+z; z=z+z; x=x+z; z=x+x; z=z+z;\n // z=z+z; z=x+z; y=y+z; x=x+y; z=x+x; t=x+z; t=t+t; t=t+t; z=z+t; y=y+z; z=y+y;\n // x=x+z; y=y+x; x=x+y; y=y+x; x=x+y; y=y+x; z=y+y; t=y+z; z=y+t; z=z+z; z=z+z;\n // z=t+z; x=x+z; y=y+x; x=x+y; y=y+x; x=x+y; z=x+x; z=x+z; y=y+z; x=x+y; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x; x=x+x;\n // x=x+x; x=x+x; x=x+x; x=x+x; res=y+x\n // res == (P + 1) // 4\n\n y := mulmod(x, x, p)\n {\n let z := mulmod(y, y, p)\n z := mulmod(z, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n {\n let t := mulmod(z, z, p)\n t := mulmod(z, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n z := mulmod(z, t, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(y, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n t := mulmod(z, z, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n z := mulmod(z, t, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n z := mulmod(x, z, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n t := mulmod(z, z, p)\n t := mulmod(t, t, p)\n t := mulmod(z, t, p)\n t := mulmod(y, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n z := mulmod(z, t, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n z := mulmod(z, z, p)\n t := mulmod(z, z, p)\n t := mulmod(z, t, p)\n {\n let w := mulmod(t, t, p)\n w := mulmod(w, w, p)\n w := mulmod(w, w, p)\n w := mulmod(w, w, p)\n w := mulmod(w, w, p)\n t := mulmod(t, w, p)\n }\n z := mulmod(z, t, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n z := mulmod(z, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(z, z, p)\n z := mulmod(y, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n t := mulmod(z, z, p)\n t := mulmod(t, t, p)\n t := mulmod(z, t, p)\n t := mulmod(x, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n z := mulmod(z, t, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n z := mulmod(y, z, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n x := mulmod(x, z, p)\n z := mulmod(x, x, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n t := mulmod(x, z, p)\n t := mulmod(t, t, p)\n t := mulmod(t, t, p)\n z := mulmod(z, t, p)\n y := mulmod(y, z, p)\n z := mulmod(y, y, p)\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n z := mulmod(y, y, p)\n t := mulmod(y, z, p)\n z := mulmod(y, t, p)\n z := mulmod(z, z, p)\n z := mulmod(z, z, p)\n z := mulmod(t, z, p)\n }\n x := mulmod(x, z, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n y := mulmod(y, x, p)\n x := mulmod(x, y, p)\n z := mulmod(x, x, p)\n z := mulmod(x, z, p)\n y := mulmod(y, z, p)\n }\n x := mulmod(x, y, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n x := mulmod(x, x, p)\n y := mulmod(y, x, p)\n }\n }\n\n /// @dev Constructs an outcome collection ID from a parent collection and an outcome collection.\n /// @param parentCollectionId Collection ID of the parent outcome collection, or bytes32(0) if there's no parent.\n /// @param conditionId Condition ID of the outcome collection to combine with the parent outcome collection.\n /// @param indexSet Index set of the outcome collection to combine with the parent outcome collection.\n function getCollectionId(bytes32 parentCollectionId, bytes32 conditionId, uint indexSet) internal view returns (bytes32) {\n uint x1 = uint(keccak256(abi.encodePacked(conditionId, indexSet)));\n bool odd = x1 >> 255 != 0;\n uint y1;\n uint yy;\n do {\n x1 = addmod(x1, 1, P);\n yy = addmod(mulmod(x1, mulmod(x1, x1, P), P), B, P);\n y1 = sqrt(yy);\n } while(mulmod(y1, y1, P) != yy);\n if(odd && y1 % 2 == 0 || !odd && y1 % 2 == 1)\n y1 = P - y1;\n\n uint x2 = uint(parentCollectionId);\n if(x2 != 0) {\n odd = x2 >> 254 != 0;\n x2 = (x2 << 2) >> 2;\n yy = addmod(mulmod(x2, mulmod(x2, x2, P), P), B, P);\n uint y2 = sqrt(yy);\n if(odd && y2 % 2 == 0 || !odd && y2 % 2 == 1)\n y2 = P - y2;\n require(mulmod(y2, y2, P) == yy, \"invalid parent collection ID\");\n\n (bool success, bytes memory ret) = address(6).staticcall(abi.encode(x1, y1, x2, y2));\n require(success, \"ecadd failed\");\n (x1, y1) = abi.decode(ret, (uint, uint));\n }\n\n if(y1 % 2 == 1)\n x1 ^= 1 << 254;\n\n return bytes32(x1);\n }\n\n /// @dev Constructs a position ID from a collateral token and an outcome collection. These IDs are used as the ERC-1155 ID for this contract.\n /// @param collateralToken Collateral token which backs the position.\n /// @param collectionId ID of the outcome collection associated with this position.\n function getPositionId(IERC20 collateralToken, bytes32 collectionId) internal pure returns (uint) {\n return uint(keccak256(abi.encodePacked(collateralToken, collectionId)));\n }\n}","compiler":{"name":"solc","version":"0.5.10+commit.5a6ea5b1.Emscripten.clang"},"networks":{},"schemaVersion":"3.2.5","updatedAt":"2020-09-17T16:00:36.801Z","devdoc":{"methods":{}},"userdoc":{"methods":{}}}