kleros-interaction-2
Version:
Smart contracts interacting with Kleros.
48 lines • 1.29 MB
JSON
{
"contractName": "MiniMeTokenFactory",
"abi": [
{
"constant": false,
"inputs": [
{
"name": "_parentToken",
"type": "address"
},
{
"name": "_snapshotBlock",
"type": "uint256"
},
{
"name": "_tokenName",
"type": "string"
},
{
"name": "_decimalUnits",
"type": "uint8"
},
{
"name": "_tokenSymbol",
"type": "string"
},
{
"name": "_transfersEnabled",
"type": "bool"
}
],
"name": "createCloneToken",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x608060405234801561001057600080fd5b50611e3b806100206000396000f3006080604052600436106100405763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416635b7b72c18114610045575b600080fd5b34801561005157600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261010694823573ffffffffffffffffffffffffffffffffffffffff1694602480359536959460649492019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b60ff8b35169b909a90999401975091955091820193509150819084018382808284375094975050505091351515925061012f915050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6000803088888888888861014161030b565b73ffffffffffffffffffffffffffffffffffffffff808916825287166020808301919091526040820187905260ff8516608083015282151560c083015260e0606083018181528751918401919091528651909160a084019161010085019189019080838360005b838110156101c05781810151838201526020016101a8565b50505050905090810190601f1680156101ed5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610220578181015183820152602001610208565b50505050905090810190601f16801561024d5780820380516001836020036101000a031916815260200191505b509950505050505050505050604051809103906000f080158015610275573d6000803e3d6000fd5b50604080517f3cebb823000000000000000000000000000000000000000000000000000000008152336004820152905191925073ffffffffffffffffffffffffffffffffffffffff831691633cebb8239160248082019260009290919082900301818387803b1580156102e757600080fd5b505af11580156102fb573d6000803e3d6000fd5b50929a9950505050505050505050565b604051611af48061031c83390190560060c0604052600760808190527f4d4d545f302e320000000000000000000000000000000000000000000000000060a090815262000040916004919062000147565b503480156200004e57600080fd5b5060405162001af438038062001af48339810160409081528151602080840151928401516060850151608086015160a087015160c088015160008054600160a060020a03191633179055600b8054600160a060020a0389166101000261010060a860020a031990911617905592880180519698949690959294919091019291620000de9160019187019062000147565b506002805460ff191660ff851617905581516200010390600390602085019062000147565b5060058054600160a060020a031916600160a060020a039790971696909617909555505050600655600b805460ff19169115159190911790555043600755620001ec565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200018a57805160ff1916838001178555620001ba565b82800160010185558215620001ba579182015b82811115620001ba5782518255916020019190600101906200019d565b50620001c8929150620001cc565b5090565b620001e991905b80821115620001c85760008155600101620001d3565b90565b6118f880620001fc6000396000f30060806040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101ef578063095ea7b31461027957806317634514146102b157806318160ddd146102d857806323b872dd146102ed578063313ce567146103175780633cebb823146103425780634ee2cd7e1461036357806354fd4d50146103875780636638c0871461039c57806370a082311461045f57806380a5400114610480578063827f32c01461049557806395d89b41146104b9578063981b24d0146104ce578063a9059cbb146104e6578063bef97c871461050a578063c5bcc4f11461051f578063cae9ca5114610534578063d3ce77fe1461059d578063dd62ed3e146105c1578063df8de3e7146105e8578063e77772fe14610609578063f41e60c51461061e578063f77c479114610638575b60005461014490600160a060020a031661064d565b151561014f57600080fd5b600054604080517ff48c30540000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163f48c3054913491602480830192602092919082900301818588803b1580156101b557600080fd5b505af11580156101c9573d6000803e3d6000fd5b50505050506040513d60208110156101e057600080fd5b505115156101ed57600080fd5b005b3480156101fb57600080fd5b5061020461067a565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023e578181015183820152602001610226565b50505050905090810190601f16801561026b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028557600080fd5b5061029d600160a060020a0360043516602435610707565b604080519115158252519081900360200190f35b3480156102bd57600080fd5b506102c6610885565b60408051918252519081900360200190f35b3480156102e457600080fd5b506102c661088b565b3480156102f957600080fd5b5061029d600160a060020a036004358116906024351660443561089c565b34801561032357600080fd5b5061032c610933565b6040805160ff9092168252519081900360200190f35b34801561034e57600080fd5b506101ed600160a060020a036004351661093c565b34801561036f57600080fd5b506102c6600160a060020a0360043516602435610982565b34801561039357600080fd5b50610204610acf565b3480156103a857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261044394369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b60ff8b35169b909a909994019750919550918201935091508190840183828082843750949750508435955050505050602001351515610b2a565b60408051600160a060020a039092168252519081900360200190f35b34801561046b57600080fd5b506102c6600160a060020a0360043516610d84565b34801561048c57600080fd5b50610443610d98565b3480156104a157600080fd5b5061029d600160a060020a0360043516602435610da7565b3480156104c557600080fd5b50610204610e73565b3480156104da57600080fd5b506102c6600435610ece565b3480156104f257600080fd5b5061029d600160a060020a0360043516602435610fc2565b34801561051657600080fd5b5061029d610fe1565b34801561052b57600080fd5b506102c6610fea565b34801561054057600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261029d948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750610ff09650505050505050565b3480156105a957600080fd5b5061029d600160a060020a036004351660243561110b565b3480156105cd57600080fd5b506102c6600160a060020a03600435811690602435166111d3565b3480156105f457600080fd5b506101ed600160a060020a03600435166111fe565b34801561061557600080fd5b506104436113e5565b34801561062a57600080fd5b506101ed60043515156113f9565b34801561064457600080fd5b50610443611423565b600080600160a060020a03831615156106695760009150610674565b823b90506000811191505b50919050565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106ff5780601f106106d4576101008083540402835291602001916106ff565b820191906000526020600020905b8154815290600101906020018083116106e257829003601f168201915b505050505081565b600b5460009060ff16151561071b57600080fd5b8115806107495750336000908152600960209081526040808320600160a060020a0387168452909152902054155b151561075457600080fd5b60005461076990600160a060020a031661064d565b1561081d5760008054604080517fda682aeb000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a038781166024830152604482018790529151919092169263da682aeb92606480820193602093909283900390910190829087803b1580156107e657600080fd5b505af11580156107fa573d6000803e3d6000fd5b505050506040513d602081101561081057600080fd5b5051151561081d57600080fd5b336000818152600960209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60075481565b600061089643610ece565b90505b90565b60008054600160a060020a0316331461091e57600b5460ff1615156108c057600080fd5b600160a060020a03841660009081526009602090815260408083203384529091529020548211156108f35750600061092c565b600160a060020a03841660009081526009602090815260408083203384529091529020805483900390555b610929848484611432565b90505b9392505050565b60025460ff1681565b600054600160a060020a0316331461095357600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a03821660009081526008602052604081205415806109de5750600160a060020a0383166000908152600860205260408120805484929081106109c757fe5b6000918252602090912001546001608060020a0316115b15610aa657600554600160a060020a031615610a9e57600554600654600160a060020a0390911690634ee2cd7e908590610a19908690611624565b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b505050506040513d6020811015610a9557600080fd5b5051905061087f565b50600061087f565b600160a060020a0383166000908152600860205260409020610ac8908361163a565b905061087f565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106ff5780601f106106d4576101008083540402835291602001916106ff565b600080831515610b38574393505b600b546040517f5b7b72c100000000000000000000000000000000000000000000000000000000815230600482018181526024830188905260ff8a16606484015286151560a484015260c0604484019081528b5160c48501528b51610100909504600160a060020a031694635b7b72c1948a938e938e938e938d939291608482019160e40190602089019080838360005b83811015610be1578181015183820152602001610bc9565b50505050905090810190601f168015610c0e5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610c41578181015183820152602001610c29565b50505050905090810190601f168015610c6e5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015610c9357600080fd5b505af1158015610ca7573d6000803e3d6000fd5b505050506040513d6020811015610cbd57600080fd5b5051604080517f3cebb8230000000000000000000000000000000000000000000000000000000081523360048201529051919250600160a060020a03831691633cebb8239160248082019260009290919082900301818387803b158015610d2357600080fd5b505af1158015610d37573d6000803e3d6000fd5b5050604080518781529051600160a060020a03851693507f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade92509081900360200190a29695505050505050565b6000610d908243610982565b90505b919050565b600554600160a060020a031681565b6000805481908190600160a060020a03163314610dc357600080fd5b610dcb61088b565b9150838201821115610ddc57600080fd5b610de585610d84565b9050838101811115610df657600080fd5b610e03600a858401611799565b600160a060020a0385166000908152600860205260409020610e2790828601611799565b604080518581529051600160a060020a038716916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106ff5780601f106106d4576101008083540402835291602001916106ff565b600a546000901580610f03575081600a6000815481101515610eec57fe5b6000918252602090912001546001608060020a0316115b15610fb057600554600160a060020a031615610fa857600554600654600160a060020a039091169063981b24d090610f3c908590611624565b6040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015610f7557600080fd5b505af1158015610f89573d6000803e3d6000fd5b505050506040513d6020811015610f9f57600080fd5b50519050610d93565b506000610d93565b610fbb600a8361163a565b9050610d93565b600b5460009060ff161515610fd657600080fd5b61092c338484611432565b600b5460ff1681565b60065481565b6000610ffc8484610707565b151561100757600080fd5b6040517f8f4ffcb10000000000000000000000000000000000000000000000000000000081523360048201818152602483018690523060448401819052608060648501908152865160848601528651600160a060020a038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b8381101561109a578181015183820152602001611082565b50505050905090810190601f1680156110c75780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156110e957600080fd5b505af11580156110fd573d6000803e3d6000fd5b506001979650505050505050565b6000805481908190600160a060020a0316331461112757600080fd5b61112f61088b565b91508382101561113e57600080fd5b61114785610d84565b90508381101561115657600080fd5b611163600a858403611799565b600160a060020a038516600090815260086020526040902061118790858303611799565b604080518581529051600091600160a060020a038816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b600080548190600160a060020a0316331461121857600080fd5b600160a060020a03831615156112695760008054604051600160a060020a0390911691303180156108fc02929091818181858888f19350505050158015611263573d6000803e3d6000fd5b506113e0565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b1580156112cd57600080fd5b505af11580156112e1573d6000803e3d6000fd5b505050506040513d60208110156112f757600080fd5b505160008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b15801561136d57600080fd5b505af1158015611381573d6000803e3d6000fd5b505050506040513d602081101561139757600080fd5b5050600054604080518381529051600160a060020a03928316928616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c919081900360200190a35b505050565b600b546101009004600160a060020a031681565b600054600160a060020a0316331461141057600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b60008080831515611446576001925061161b565b600654431161145457600080fd5b600160a060020a038516158015906114755750600160a060020a0385163014155b151561148057600080fd5b61148a8643610982565b91508382101561149d576000925061161b565b6000546114b290600160a060020a031661064d565b156115685760008054604080517f4a393149000000000000000000000000000000000000000000000000000000008152600160a060020a038a8116600483015289811660248301526044820189905291519190921692634a39314992606480820193602093909283900390910190829087803b15801561153157600080fd5b505af1158015611545573d6000803e3d6000fd5b505050506040513d602081101561155b57600080fd5b5051151561156857600080fd5b600160a060020a038616600090815260086020526040902061158c90858403611799565b6115968543610982565b90508381018111156115a757600080fd5b600160a060020a03851660009081526008602052604090206115cb90828601611799565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3600192505b50509392505050565b6000818310611633578161092c565b5090919050565b6000806000808580549050600014156116565760009350611790565b85548690600019810190811061166857fe5b6000918252602090912001546001608060020a031685106116c55785548690600019810190811061169557fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a03169350611790565b8560008154811015156116d457fe5b6000918252602090912001546001608060020a03168510156116f95760009350611790565b8554600093506000190191505b8282111561175657600260018385010104905084868281548110151561172857fe5b6000918252602090912001546001608060020a03161161174a57809250611751565b6001810391505b611706565b858381548110151561176457fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b8154600090819015806117d2575083544390859060001981019081106117bb57fe5b6000918252602090912001546001608060020a0316105b1561184457835484906117e8826001830161188f565b815481106117f257fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff1990931692909217161781559150611889565b83548490600019810190811061185657fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b8154818355818111156113e0576000838152602090206113e091810190830161089991905b808211156118c857600081556001016118b4565b50905600a165627a7a723058204217abdac45fba410e3f4f6446799817b6cad98c772ee3f5969a798debd1298f0029a165627a7a7230582047e6a90363750499ab5b89f4dc83813b4e968add6acecb5b15308053cb3a2cf10029",
"deployedBytecode": "0x6080604052600436106100405763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416635b7b72c18114610045575b600080fd5b34801561005157600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261010694823573ffffffffffffffffffffffffffffffffffffffff1694602480359536959460649492019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b60ff8b35169b909a90999401975091955091820193509150819084018382808284375094975050505091351515925061012f915050565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6000803088888888888861014161030b565b73ffffffffffffffffffffffffffffffffffffffff808916825287166020808301919091526040820187905260ff8516608083015282151560c083015260e0606083018181528751918401919091528651909160a084019161010085019189019080838360005b838110156101c05781810151838201526020016101a8565b50505050905090810190601f1680156101ed5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610220578181015183820152602001610208565b50505050905090810190601f16801561024d5780820380516001836020036101000a031916815260200191505b509950505050505050505050604051809103906000f080158015610275573d6000803e3d6000fd5b50604080517f3cebb823000000000000000000000000000000000000000000000000000000008152336004820152905191925073ffffffffffffffffffffffffffffffffffffffff831691633cebb8239160248082019260009290919082900301818387803b1580156102e757600080fd5b505af11580156102fb573d6000803e3d6000fd5b50929a9950505050505050505050565b604051611af48061031c83390190560060c0604052600760808190527f4d4d545f302e320000000000000000000000000000000000000000000000000060a090815262000040916004919062000147565b503480156200004e57600080fd5b5060405162001af438038062001af48339810160409081528151602080840151928401516060850151608086015160a087015160c088015160008054600160a060020a03191633179055600b8054600160a060020a0389166101000261010060a860020a031990911617905592880180519698949690959294919091019291620000de9160019187019062000147565b506002805460ff191660ff851617905581516200010390600390602085019062000147565b5060058054600160a060020a031916600160a060020a039790971696909617909555505050600655600b805460ff19169115159190911790555043600755620001ec565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200018a57805160ff1916838001178555620001ba565b82800160010185558215620001ba579182015b82811115620001ba5782518255916020019190600101906200019d565b50620001c8929150620001cc565b5090565b620001e991905b80821115620001c85760008155600101620001d3565b90565b6118f880620001fc6000396000f30060806040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101ef578063095ea7b31461027957806317634514146102b157806318160ddd146102d857806323b872dd146102ed578063313ce567146103175780633cebb823146103425780634ee2cd7e1461036357806354fd4d50146103875780636638c0871461039c57806370a082311461045f57806380a5400114610480578063827f32c01461049557806395d89b41146104b9578063981b24d0146104ce578063a9059cbb146104e6578063bef97c871461050a578063c5bcc4f11461051f578063cae9ca5114610534578063d3ce77fe1461059d578063dd62ed3e146105c1578063df8de3e7146105e8578063e77772fe14610609578063f41e60c51461061e578063f77c479114610638575b60005461014490600160a060020a031661064d565b151561014f57600080fd5b600054604080517ff48c30540000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163f48c3054913491602480830192602092919082900301818588803b1580156101b557600080fd5b505af11580156101c9573d6000803e3d6000fd5b50505050506040513d60208110156101e057600080fd5b505115156101ed57600080fd5b005b3480156101fb57600080fd5b5061020461067a565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023e578181015183820152602001610226565b50505050905090810190601f16801561026b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028557600080fd5b5061029d600160a060020a0360043516602435610707565b604080519115158252519081900360200190f35b3480156102bd57600080fd5b506102c6610885565b60408051918252519081900360200190f35b3480156102e457600080fd5b506102c661088b565b3480156102f957600080fd5b5061029d600160a060020a036004358116906024351660443561089c565b34801561032357600080fd5b5061032c610933565b6040805160ff9092168252519081900360200190f35b34801561034e57600080fd5b506101ed600160a060020a036004351661093c565b34801561036f57600080fd5b506102c6600160a060020a0360043516602435610982565b34801561039357600080fd5b50610204610acf565b3480156103a857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261044394369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b60ff8b35169b909a909994019750919550918201935091508190840183828082843750949750508435955050505050602001351515610b2a565b60408051600160a060020a039092168252519081900360200190f35b34801561046b57600080fd5b506102c6600160a060020a0360043516610d84565b34801561048c57600080fd5b50610443610d98565b3480156104a157600080fd5b5061029d600160a060020a0360043516602435610da7565b3480156104c557600080fd5b50610204610e73565b3480156104da57600080fd5b506102c6600435610ece565b3480156104f257600080fd5b5061029d600160a060020a0360043516602435610fc2565b34801561051657600080fd5b5061029d610fe1565b34801561052b57600080fd5b506102c6610fea565b34801561054057600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261029d948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750610ff09650505050505050565b3480156105a957600080fd5b5061029d600160a060020a036004351660243561110b565b3480156105cd57600080fd5b506102c6600160a060020a03600435811690602435166111d3565b3480156105f457600080fd5b506101ed600160a060020a03600435166111fe565b34801561061557600080fd5b506104436113e5565b34801561062a57600080fd5b506101ed60043515156113f9565b34801561064457600080fd5b50610443611423565b600080600160a060020a03831615156106695760009150610674565b823b90506000811191505b50919050565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106ff5780601f106106d4576101008083540402835291602001916106ff565b820191906000526020600020905b8154815290600101906020018083116106e257829003601f168201915b505050505081565b600b5460009060ff16151561071b57600080fd5b8115806107495750336000908152600960209081526040808320600160a060020a0387168452909152902054155b151561075457600080fd5b60005461076990600160a060020a031661064d565b1561081d5760008054604080517fda682aeb000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a038781166024830152604482018790529151919092169263da682aeb92606480820193602093909283900390910190829087803b1580156107e657600080fd5b505af11580156107fa573d6000803e3d6000fd5b505050506040513d602081101561081057600080fd5b5051151561081d57600080fd5b336000818152600960209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60075481565b600061089643610ece565b90505b90565b60008054600160a060020a0316331461091e57600b5460ff1615156108c057600080fd5b600160a060020a03841660009081526009602090815260408083203384529091529020548211156108f35750600061092c565b600160a060020a03841660009081526009602090815260408083203384529091529020805483900390555b610929848484611432565b90505b9392505050565b60025460ff1681565b600054600160a060020a0316331461095357600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a03821660009081526008602052604081205415806109de5750600160a060020a0383166000908152600860205260408120805484929081106109c757fe5b6000918252602090912001546001608060020a0316115b15610aa657600554600160a060020a031615610a9e57600554600654600160a060020a0390911690634ee2cd7e908590610a19908690611624565b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b505050506040513d6020811015610a9557600080fd5b5051905061087f565b50600061087f565b600160a060020a0383166000908152600860205260409020610ac8908361163a565b905061087f565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106ff5780601f106106d4576101008083540402835291602001916106ff565b600080831515610b38574393505b600b546040517f5b7b72c100000000000000000000000000000000000000000000000000000000815230600482018181526024830188905260ff8a16606484015286151560a484015260c0604484019081528b5160c48501528b51610100909504600160a060020a031694635b7b72c1948a938e938e938e938d939291608482019160e40190602089019080838360005b83811015610be1578181015183820152602001610bc9565b50505050905090810190601f168015610c0e5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610c41578181015183820152602001610c29565b50505050905090810190601f168015610c6e5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015610c9357600080fd5b505af1158015610ca7573d6000803e3d6000fd5b505050506040513d6020811015610cbd57600080fd5b5051604080517f3cebb8230000000000000000000000000000000000000000000000000000000081523360048201529051919250600160a060020a03831691633cebb8239160248082019260009290919082900301818387803b158015610d2357600080fd5b505af1158015610d37573d6000803e3d6000fd5b5050604080518781529051600160a060020a03851693507f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade92509081900360200190a29695505050505050565b6000610d908243610982565b90505b919050565b600554600160a060020a031681565b6000805481908190600160a060020a03163314610dc357600080fd5b610dcb61088b565b9150838201821115610ddc57600080fd5b610de585610d84565b9050838101811115610df657600080fd5b610e03600a858401611799565b600160a060020a0385166000908152600860205260409020610e2790828601611799565b604080518581529051600160a060020a038716916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106ff5780601f106106d4576101008083540402835291602001916106ff565b600a546000901580610f03575081600a6000815481101515610eec57fe5b6000918252602090912001546001608060020a0316115b15610fb057600554600160a060020a031615610fa857600554600654600160a060020a039091169063981b24d090610f3c908590611624565b6040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015610f7557600080fd5b505af1158015610f89573d6000803e3d6000fd5b505050506040513d6020811015610f9f57600080fd5b50519050610d93565b506000610d93565b610fbb600a8361163a565b9050610d93565b600b5460009060ff161515610fd657600080fd5b61092c338484611432565b600b5460ff1681565b60065481565b6000610ffc8484610707565b151561100757600080fd5b6040517f8f4ffcb10000000000000000000000000000000000000000000000000000000081523360048201818152602483018690523060448401819052608060648501908152865160848601528651600160a060020a038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b8381101561109a578181015183820152602001611082565b50505050905090810190601f1680156110c75780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156110e957600080fd5b505af11580156110fd573d6000803e3d6000fd5b506001979650505050505050565b6000805481908190600160a060020a0316331461112757600080fd5b61112f61088b565b91508382101561113e57600080fd5b61114785610d84565b90508381101561115657600080fd5b611163600a858403611799565b600160a060020a038516600090815260086020526040902061118790858303611799565b604080518581529051600091600160a060020a038816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b600080548190600160a060020a0316331461121857600080fd5b600160a060020a03831615156112695760008054604051600160a060020a0390911691303180156108fc02929091818181858888f19350505050158015611263573d6000803e3d6000fd5b506113e0565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b1580156112cd57600080fd5b505af11580156112e1573d6000803e3d6000fd5b505050506040513d60208110156112f757600080fd5b505160008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b15801561136d57600080fd5b505af1158015611381573d6000803e3d6000fd5b505050506040513d602081101561139757600080fd5b5050600054604080518381529051600160a060020a03928316928616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c919081900360200190a35b505050565b600b546101009004600160a060020a031681565b600054600160a060020a0316331461141057600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b60008080831515611446576001925061161b565b600654431161145457600080fd5b600160a060020a038516158015906114755750600160a060020a0385163014155b151561148057600080fd5b61148a8643610982565b91508382101561149d576000925061161b565b6000546114b290600160a060020a031661064d565b156115685760008054604080517f4a393149000000000000000000000000000000000000000000000000000000008152600160a060020a038a8116600483015289811660248301526044820189905291519190921692634a39314992606480820193602093909283900390910190829087803b15801561153157600080fd5b505af1158015611545573d6000803e3d6000fd5b505050506040513d602081101561155b57600080fd5b5051151561156857600080fd5b600160a060020a038616600090815260086020526040902061158c90858403611799565b6115968543610982565b90508381018111156115a757600080fd5b600160a060020a03851660009081526008602052604090206115cb90828601611799565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3600192505b50509392505050565b6000818310611633578161092c565b5090919050565b6000806000808580549050600014156116565760009350611790565b85548690600019810190811061166857fe5b6000918252602090912001546001608060020a031685106116c55785548690600019810190811061169557fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a03169350611790565b8560008154811015156116d457fe5b6000918252602090912001546001608060020a03168510156116f95760009350611790565b8554600093506000190191505b8282111561175657600260018385010104905084868281548110151561172857fe5b6000918252602090912001546001608060020a03161161174a57809250611751565b6001810391505b611706565b858381548110151561176457fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b8154600090819015806117d2575083544390859060001981019081106117bb57fe5b6000918252602090912001546001608060020a0316105b1561184457835484906117e8826001830161188f565b815481106117f257fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff1990931692909217161781559150611889565b83548490600019810190811061185657fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b8154818355818111156113e0576000838152602090206113e091810190830161089991905b808211156118c857600081556001016118b4565b50905600a165627a7a723058204217abdac45fba410e3f4f6446799817b6cad98c772ee3f5969a798debd1298f0029a165627a7a7230582047e6a90363750499ab5b89f4dc83813b4e968add6acecb5b15308053cb3a2cf10029",
"sourceMap": "21574:1241:58:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21574:1241:58;;;;;;;",
"deployedSourceMap": "21574:1241:58:-;;;;;;;;;;;;;;;;;;;;;;;22254:559;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22254:559:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22254:559:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22254:559:58;;-1:-1:-1;22254:559:58;;;;-1:-1:-1;22254:559:58;-1:-1:-1;22254:559:58;;;;;;;;;;-1:-1:-1;22254:559:58;;-1:-1:-1;;;;22254:559:58;;;;;-1:-1:-1;22254:559:58;;-1:-1:-1;;22254:559:58;;;;;;;;;;;;;;;;;;;;;22478:11;22501:20;22553:4;22571:12;22597:14;22625:10;22649:13;22676:12;22702:17;22524:209;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;22524:209:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22524:209:58;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;22524:209:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;22744:37:58;;;;;;22770:10;22744:37;;;;;;22501:232;;-1:-1:-1;22744:25:58;;;;;;:37;;;;;-1:-1:-1;;22744:37:58;;;;;;;;-1:-1:-1;22744:25:58;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;22744:37:58;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;22798:8:58;;22254:559;-1:-1:-1;;;;;;;;;;22254:559:58:o;21574:1241::-;;;;;;;;;;:::o",
"source": "pragma solidity ^0.4.18;\n\n/*\n Copyright 2016, Jordi Baylina\n\n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/// @title MiniMeToken Contract\n/// @author Jordi Baylina\n/// @dev This token contract's goal is to make it easy for anyone to clone this\n/// token using the token distribution at a given block, this will allow DAO's\n/// and DApps to upgrade their features in a decentralized manner without\n/// affecting the original token\n/// @dev It is ERC20 compliant, but still needs to under go further testing.\n\nimport \"./Controlled.sol\";\nimport \"./TokenController.sol\";\n\ncontract ApproveAndCallFallBack {\n function receiveApproval(address from, uint256 _amount, address _token, bytes _data) public;\n}\n\n/// @dev The actual token contract, the default controller is the msg.sender\n/// that deploys the contract, so usually this token will be deployed by a\n/// token controller contract, which Giveth will call a \"Campaign\"\ncontract MiniMeToken is Controlled {\n\n string public name; //The Token's name: e.g. DigixDAO Tokens\n uint8 public decimals; //Number of decimals of the smallest unit\n string public symbol; //An identifier: e.g. REP\n string public version = 'MMT_0.2'; //An arbitrary versioning scheme\n\n\n /// @dev `Checkpoint` is the structure that attaches a block number to a\n /// given value, the block number attached is the one that last changed the\n /// value\n struct Checkpoint {\n\n // `fromBlock` is the block number that the value was generated from\n uint128 fromBlock;\n\n // `value` is the amount of tokens at a specific block number\n uint128 value;\n }\n\n // `parentToken` is the Token address that was cloned to produce this token;\n // it will be 0x0 for a token that was not cloned\n MiniMeToken public parentToken;\n\n // `parentSnapShotBlock` is the block number from the Parent Token that was\n // used to determine the initial distribution of the Clone Token\n uint public parentSnapShotBlock;\n\n // `creationBlock` is the block number that the Clone Token was created\n uint public creationBlock;\n\n // `balances` is the map that tracks the balance of each address, in this\n // contract when the balance changes the block number that the change\n // occurred is also included in the map\n mapping (address => Checkpoint[]) balances;\n\n // `allowed` tracks any extra transfer rights as in all ERC20 tokens\n mapping (address => mapping (address => uint256)) allowed;\n\n // Tracks the history of the `totalSupply` of the token\n Checkpoint[] totalSupplyHistory;\n\n // Flag that determines if the token is transferable or not.\n bool public transfersEnabled;\n\n // The factory used to create new clone tokens\n MiniMeTokenFactory public tokenFactory;\n\n////////////////\n// Constructor\n////////////////\n\n /// @notice Constructor to create a MiniMeToken\n /// @param _tokenFactory The address of the MiniMeTokenFactory contract that\n /// will create the Clone token contracts, the token factory needs to be\n /// deployed first\n /// @param _parentToken Address of the parent token, set to 0x0 if it is a\n /// new token\n /// @param _parentSnapShotBlock Block of the parent token that will\n /// determine the initial distribution of the clone token, set to 0 if it\n /// is a new token\n /// @param _tokenName Name of the new token\n /// @param _decimalUnits Number of decimals of the new token\n /// @param _tokenSymbol Token Symbol for the new token\n /// @param _transfersEnabled If true, tokens will be able to be transferred\n function MiniMeToken(\n address _tokenFactory,\n address _parentToken,\n uint _parentSnapShotBlock,\n string _tokenName,\n uint8 _decimalUnits,\n string _tokenSymbol,\n bool _transfersEnabled\n ) public {\n tokenFactory = MiniMeTokenFactory(_tokenFactory);\n name = _tokenName; // Set the name\n decimals = _decimalUnits; // Set the decimals\n symbol = _tokenSymbol; // Set the symbol\n parentToken = MiniMeToken(_parentToken);\n parentSnapShotBlock = _parentSnapShotBlock;\n transfersEnabled = _transfersEnabled;\n creationBlock = block.number;\n }\n\n\n///////////////////\n// ERC20 Methods\n///////////////////\n\n /// @notice Send `_amount` tokens to `_to` from `msg.sender`\n /// @param _to The address of the recipient\n /// @param _amount The amount of tokens to be transferred\n /// @return Whether the transfer was successful or not\n function transfer(address _to, uint256 _amount) public returns (bool success) {\n require(transfersEnabled);\n return doTransfer(msg.sender, _to, _amount);\n }\n\n /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it\n /// is approved by `_from`\n /// @param _from The address holding the tokens being transferred\n /// @param _to The address of the recipient\n /// @param _amount The amount of tokens to be transferred\n /// @return True if the transfer was successful\n function transferFrom(address _from, address _to, uint256 _amount\n ) public returns (bool success) {\n\n // The controller of this contract can move tokens around at will,\n // this is important to recognize! Confirm that you trust the\n // controller of this contract, which in most situations should be\n // another open source smart contract or 0x0\n if (msg.sender != controller) {\n require(transfersEnabled);\n\n // The standard ERC 20 transferFrom functionality\n if (allowed[_from][msg.sender] < _amount) return false;\n allowed[_from][msg.sender] -= _amount;\n }\n return doTransfer(_from, _to, _amount);\n }\n\n /// @dev This is the actual transfer function in the token contract, it can\n /// only be called by other functions in this contract.\n /// @param _from The address holding the tokens being transferred\n /// @param _to The address of the recipient\n /// @param _amount The amount of tokens to be transferred\n /// @return True if the transfer was successful\n function doTransfer(address _from, address _to, uint _amount\n ) internal returns(bool) {\n\n if (_amount == 0) {\n return true;\n }\n\n require(parentSnapShotBlock < block.number);\n\n // Do not allow transfer to 0x0 or the token contract itself\n require((_to != 0) && (_to != address(this)));\n\n // If the amount being transfered is more than the balance of the\n // account the transfer returns false\n var previousBalanceFrom = balanceOfAt(_from, block.number);\n if (previousBalanceFrom < _amount) {\n return false;\n }\n\n // Alerts the token controller of the transfer\n if (isContract(controller)) {\n require(TokenController(controller).onTransfer(_from, _to, _amount));\n }\n\n // First update the balance array with the new value for the address\n // sending the tokens\n updateValueAtNow(balances[_from], previousBalanceFrom - _amount);\n\n // Then update the balance array with the new value for the address\n // receiving the tokens\n var previousBalanceTo = balanceOfAt(_to, block.number);\n require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow\n updateValueAtNow(balances[_to], previousBalanceTo + _amount);\n\n // An event to make the transfer easy to find on the blockchain\n Transfer(_from, _to, _amount);\n\n return true;\n }\n\n /// @param _owner The address that's balance is being requested\n /// @return The balance of `_owner` at the current block\n function balanceOf(address _owner) public constant returns (uint256 balance) {\n return balanceOfAt(_owner, block.number);\n }\n\n /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on\n /// its behalf. This is a modified version of the ERC20 approve function\n /// to be a little bit safer\n /// @param _spender The address of the account able to transfer the tokens\n /// @param _amount The amount of tokens to be approved for transfer\n /// @return True if the approval was successful\n function approve(address _spender, uint256 _amount) public returns (bool success) {\n require(transfersEnabled);\n\n // To change the approve amount you first have to reduce the addresses`\n // allowance to zero by calling `approve(_spender,0)` if it is not\n // already 0 to mitigate the race condition described here:\n // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n require((_amount == 0) || (allowed[msg.sender][_spender] == 0));\n\n // Alerts the token controller of the approve function call\n if (isContract(controller)) {\n require(TokenController(controller).onApprove(msg.sender, _spender, _amount));\n }\n\n allowed[msg.sender][_spender] = _amount;\n Approval(msg.sender, _spender, _amount);\n return true;\n }\n\n /// @dev This function makes it easy to read the `allowed[]` map\n /// @param _owner The address of the account that owns the token\n /// @param _spender The address of the account able to transfer the tokens\n /// @return Amount of remaining tokens of _owner that _spender is allowed\n /// to spend\n function allowance(address _owner, address _spender\n ) public constant returns (uint256 remaining) {\n return allowed[_owner][_spender];\n }\n\n /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on\n /// its behalf, and then a function is triggered in the contract that is\n /// being approved, `_spender`. This allows users to use their tokens to\n /// interact with contracts in one function call instead of two\n /// @param _spender The address of the contract able to transfer the tokens\n /// @param _amount The amount of tokens to be approved for transfer\n /// @return True if the function call was successful\n function approveAndCall(address _spender, uint256 _amount, bytes _extraData\n ) public returns (bool success) {\n require(approve(_spender, _amount));\n\n ApproveAndCallFallBack(_spender).receiveApproval(\n msg.sender,\n _amount,\n this,\n _extraData\n );\n\n return true;\n }\n\n /// @dev This function makes it easy to get the total number of tokens\n /// @return The total number of tokens\n function totalSupply() public constant returns (uint) {\n return totalSupplyAt(block.number);\n }\n\n\n////////////////\n// Query balance and totalSupply in History\n////////////////\n\n /// @dev Queries the balance of `_owner` at a specific `_blockNumber`\n /// @param _owner The address from which the balance will be retrieved\n /// @param _blockNumber The block number when the balance is queried\n /// @return The balance at `_blockNumber`\n function balanceOfAt(address _owner, uint _blockNumber) public constant\n returns (uint) {\n\n // These next few lines are used when the balance of the token is\n // requested before a check point was ever created for this token, it\n // requires that the `parentToken.balanceOfAt` be queried at the\n // genesis block for that token as this contains initial balance of\n // this token\n if ((balances[_owner].length == 0)\n || (balances[_owner][0].fromBlock > _blockNumber)) {\n if (address(parentToken) != 0) {\n return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock));\n } else {\n // Has no parent\n return 0;\n }\n\n // This will return the expected balance during normal situations\n } else {\n return getValueAt(balances[_owner], _blockNumber);\n }\n }\n\n /// @notice Total amount of tokens at a specific `_blockNumber`.\n /// @param _blockNumber The block number when the totalSupply is queried\n /// @return The total amount of tokens at `_blockNumber`\n function totalSupplyAt(uint _blockNumber) public constant returns(uint) {\n\n // These next few lines are used when the totalSupply of the token is\n // requested before a check point was ever created for this token, it\n // requires that the `parentToken.totalSupplyAt` be queried at the\n // genesis block for this token as that contains totalSupply of this\n // token at this block number.\n if ((totalSupplyHistory.length == 0)\n || (totalSupplyHistory[0].fromBlock > _blockNumber)) {\n if (address(parentToken) != 0) {\n return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock));\n } else {\n return 0;\n }\n\n // This will return the expected totalSupply during normal situations\n } else {\n return getValueAt(totalSupplyHistory, _blockNumber);\n }\n }\n\n////////////////\n// Clone Token Method\n////////////////\n\n /// @notice Creates a new clone token with the initial distribution being\n /// this token at `_snapshotBlock`\n /// @param _cloneTokenName Name of the clone token\n /// @param _cloneDecimalUnits Number of decimals of the smallest unit\n /// @param _cloneTokenSymbol Symbol of the clone token\n /// @param _snapshotBlock Block when the distribution of the parent token is\n /// copied to set the initial distribution of the new clone token;\n /// if the block is zero than the actual block, the current block is used\n /// @param _transfersEnabled True if transfers are allowed in the clone\n /// @return The address of the new MiniMeToken Contract\n function createCloneToken(\n string _cloneTokenName,\n uint8 _cloneDecimalUnits,\n string _cloneTokenSymbol,\n uint _snapshotBlock,\n bool _transfersEnabled\n ) public returns(address) {\n if (_snapshotBlock == 0) _snapshotBlock = block.number;\n MiniMeToken cloneToken = tokenFactory.createCloneToken(\n this,\n _snapshotBlock,\n _cloneTokenName,\n _cloneDecimalUnits,\n _cloneTokenSymbol,\n _transfersEnabled\n );\n\n cloneToken.changeController(msg.sender);\n\n // An event to make the token easy to find on the blockchain\n NewCloneToken(address(cloneToken), _snapshotBlock);\n return address(cloneToken);\n }\n\n////////////////\n// Generate and destroy tokens\n////////////////\n\n /// @notice Generates `_amount` tokens that are assigned to `_owner`\n /// @param _owner The address that will be assigned the new tokens\n /// @param _amount The quantity of tokens generated\n /// @return True if the tokens are generated correctly\n function generateTokens(address _owner, uint _amount\n ) public onlyController returns (bool) {\n uint curTotalSupply = totalSupply();\n require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow\n uint previousBalanceTo = balanceOf(_owner);\n require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow\n updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount);\n updateValueAtNow(balances[_owner], previousBalanceTo + _amount);\n Transfer(0, _ow