Fantom-foundation/go-lachesis

View on GitHub
lachesis/genesis/sfc/sfc_predeploy.go

Summary

Maintainability
A
0 mins
Test Coverage
package sfc

import (
    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/common/hexutil"

    "github.com/Fantom-foundation/go-lachesis/inter"
    "github.com/Fantom-foundation/go-lachesis/inter/idx"
    "github.com/Fantom-foundation/go-lachesis/inter/pos"
    "github.com/Fantom-foundation/go-lachesis/lachesis/genesis/sfc/sfcpos"
    "github.com/Fantom-foundation/go-lachesis/utils"
)

// GetMainContractBinV1 is SFC contract first implementation bin code for mainnet
// Must be compiled with bin-runtime flag
func GetMainContractBinV1() []byte {
    return hexutil.MustDecode("0x6080604052600436106103605760003560e01c8063715018a6116101c6578063bed9d861116100f7578063e895798811610095578063f2fde38b1161006f578063f2fde38b14610b82578063f70f53e014610bc2578063f99837e614610bf2578063fd5e6dd114610c2257610360565b8063e895798814610b1c578063ec6a7f1c14610662578063f0f947c814610b5257610360565b8063c41b6405116100d1578063c41b640514610a59578063c4b5dd7e14610365578063cc8c212014610a6e578063d9e257ef14610b1457610360565b8063bed9d861146109af578063bffe3486146109c4578063c312eb0714610a3c57610360565b806396060e7111610164578063a77865151161013e578063a7786515146108e3578063ab2273c0146108f8578063b6732f3d1461090d578063b9029d501461095957610360565b806396060e71146107db57806398ec2de51461082f578063a70da4d2146108ce57610360565b806381d9dc7a116101a057806381d9dc7a1461074a5780638447c4df1461075f5780638da5cb5b146107885780638f32d59b146107c657610360565b8063715018a61461070b57806376671808146107205780637cacb1d61461073557610360565b806333a14912116102a05780633fee10a81161023e57806354d77ed21161021857806354d77ed21461045157806363321e27146106a15780636a1cf400146106e15780636cf6d675146106f657610360565b80633fee10a8146106625780634bd202dc1461067757806353a725861461068c57610360565b8063391909391161027a578063391909391461060e5780633a0af4d4146106235780633d0317fe146106385780633f4ef95f1461064d57610360565b806333a14912146105165780633594a5d2146105c9578063375b3c0a146105f957610360565b80631b593d8a1161030d5780631e8a6956116102e75780631e8a6956146104665780632265f284146104d75780632709275e146104ec57806330fa99291461050157610360565b80631b593d8a146104125780631c3333181461043c5780631d58179c1461045157610360565b80630a29180c1161033e5780630a29180c146103b6578063119e351a146103cb57806316bfdd81146103fd57610360565b80630298599214610365578063041d97a31461038c57806308728f6e146103a1575b600080fd5b34801561037157600080fd5b5061037a610ca9565b60408051918252519081900360200190f35b34801561039857600080fd5b5061037a610cb6565b3480156103ad57600080fd5b5061037a610d31565b3480156103c257600080fd5b5061037a610d37565b3480156103d757600080fd5b506103fb600480360360408110156103ee57600080fd5b5080359060200135610d3d565b005b34801561040957600080fd5b506103fb610def565b34801561041e57600080fd5b506103fb6004803603602081101561043557600080fd5b5035611124565b34801561044857600080fd5b506103fb6111cd565b34801561045d57600080fd5b5061037a6113b6565b34801561047257600080fd5b506104906004803603602081101561048957600080fd5b50356113bb565b60408051998a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e084015261010083015251908190036101200190f35b3480156104e357600080fd5b5061037a611409565b3480156104f857600080fd5b5061037a611410565b34801561050d57600080fd5b5061037a611420565b34801561052257600080fd5b506103fb6004803603602081101561053957600080fd5b81019060208101813564010000000081111561055457600080fd5b82018360208201111561056657600080fd5b8035906020019184600183028401116401000000008311171561058857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611426945050505050565b3480156105d557600080fd5b5061037a600480360360408110156105ec57600080fd5b5080359060200135611569565b34801561060557600080fd5b5061037a61165c565b34801561061a57600080fd5b506103fb61166b565b34801561062f57600080fd5b5061037a6116e0565b34801561064457600080fd5b5061037a6116e7565b34801561065957600080fd5b5061037a6116ed565b34801561066e57600080fd5b5061037a6116f3565b34801561068357600080fd5b5061037a6116fa565b34801561069857600080fd5b5061037a611700565b3480156106ad57600080fd5b5061037a600480360360208110156106c457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611708565b3480156106ed57600080fd5b5061037a611730565b34801561070257600080fd5b5061037a611790565b34801561071757600080fd5b506103fb611798565b34801561072c57600080fd5b5061037a61187a565b34801561074157600080fd5b5061037a611883565b34801561075657600080fd5b5061037a611889565b34801561076b57600080fd5b5061077461188f565b604080519115158252519081900360200190f35b34801561079457600080fd5b5061079d6118b8565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156107d257600080fd5b506107746118d4565b3480156107e757600080fd5b50610811600480360360608110156107fe57600080fd5b50803590602081013590604001356118f2565b60408051938452602084019290925282820152519081900360600190f35b34801561083b57600080fd5b506108596004803603602081101561085257600080fd5b5035611962565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561089357818101518382015260200161087b565b50505050905090810190601f1680156108c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108da57600080fd5b5061037a611a1b565b3480156108ef57600080fd5b5061037a611a21565b34801561090457600080fd5b5061037a611a2e565b34801561091957600080fd5b506108116004803603606081101561093057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060400135611a34565b34801561096557600080fd5b506109896004803603604081101561097c57600080fd5b5080359060200135611b1d565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156109bb57600080fd5b506103fb611b50565b3480156109d057600080fd5b50610a04600480360360208110156109e757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611e89565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b6103fb60048036036020811015610a5257600080fd5b5035611ec6565b348015610a6557600080fd5b506103fb6123ac565b6103fb60048036036020811015610a8457600080fd5b810190602081018135640100000000811115610a9f57600080fd5b820183602082011115610ab157600080fd5b80359060200191846001830284011164010000000083111715610ad357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612507945050505050565b6103fb6127bd565b348015610b2857600080fd5b5061037a60048036036060811015610b3f57600080fd5b5080359060208101359060400135612a41565b348015610b5e57600080fd5b506103fb60048036036040811015610b7557600080fd5b5080359060200135612aeb565b348015610b8e57600080fd5b506103fb60048036036020811015610ba557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612df0565b348015610bce57600080fd5b5061037a60048036036040811015610be557600080fd5b5080359060200135612e6f565b348015610bfe57600080fd5b506103fb60048036036040811015610c1557600080fd5b5080359060200135612f13565b348015610c2e57600080fd5b50610c4c60048036036020811015610c4557600080fd5b50356132f6565b60408051998a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e084015273ffffffffffffffffffffffffffffffffffffffff1661010083015251908190036101200190f35b670de0b6b3a76400005b90565b601e546000908152601f602052604081206009015480610cda576000915050610cb3565b601e546000908152601f602052604081206008810154600790910154610d059163ffffffff61335616565b9050610d2a82610d1e83620f424063ffffffff6133ca16565b9063ffffffff61343d16565b9250505090565b60235481565b60285481565b610d456118d4565b610db057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b604080518381526020810183905281517f95ae5488127de4bc98492f4487556e7af9f37eb4b6d5e94f6d849e03ff76cc7c929181900390910190a15050565b33600081815260296020526040902060030154610e6d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f64656c65676174696f6e207761736e2774206465616374697661746564000000604482015290519081900360640190fd5b610e756116f3565b73ffffffffffffffffffffffffffffffffffffffff821660009081526029602052604090206003015401421015610f0d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e6f7420656e6f7567682074696d652070617373656400000000000000000000604482015290519081900360640190fd5b610f156113b6565b73ffffffffffffffffffffffffffffffffffffffff821660009081526029602052604090206002015401610f4761187a565b1015610fb457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6e6f7420656e6f7567682065706f636873207061737365640000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260296020818152604080842060068101805480875284805292862054968652939092526004820180548584556001808501879055600285018790556003850187905591869055600590930185905592849055602580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190556026549094909216151591611065908263ffffffff61347f16565b602655816110b65760405173ffffffffffffffffffffffffffffffffffffffff86169082156108fc029083906000818181858888f193505050501580156110b0573d6000803e3d6000fd5b506110ba565b8092505b6027546110cd908463ffffffff61335616565b602755604080518481529051859173ffffffffffffffffffffffffffffffffffffffff8816917f87e86b3710b72c10173ca52c6a9f9cf2df27e77ed177741a8b4feb12bb7a606f9181900360200190a35050505050565b61112c6118d4565b61119757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6040805182815290517f8cd9dae1bbea2bc8a5e80ffce2c224727a25925130a03ae100619a8861ae23969181900360200190a150565b3360008181526029602052604090206004015461124b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f64656c65676174696f6e20646f65736e27742065786973740000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260296020526040902060030154156112e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f64656c65676174696f6e20697320646561637469766174656400000000000000604482015290519081900360640190fd5b6112e861187a565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260296020908152604080832060028101949094554260038501556006840154600490940154848452918052909120600501541561136e57600082815260208052604090206007015461135c908263ffffffff61347f16565b60008381526020805260409020600701555b604051829073ffffffffffffffffffffffffffffffffffffffff8516907f5b1eea49e405ef6d509836aac841959c30bb0673b1fd70859bfc6ae5e4ee3df290600090a3505050565b600390565b601f6020528060005260406000206000915090508060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154908060090154905089565b62e4e1c090565b600060646301c9c3805b04905090565b60265481565b33600081815260216020526040902054806114a257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7374616b657220646f65736e2774206578697374000000000000000000000000604482015290519081900360640190fd5b6114aa611a2e565b8351111561151957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f746f6f20626967206d6574616461746100000000000000000000000000000000604482015290519081900360640190fd5b6000818152602b602090815260409091208451611538928601906137cb565b5060405181907fb7a99a0df6a9e15c2689e6a55811ef76cdb514c67d4a0e37fcb125ada0e3cd8390600090a2505050565b6000818152601f6020908152604080832060048101548685529281905290832060028101546005909201546003909101548483156115e4576000878152601f6020526040902060068101546002909101546115e1918791610d1e9188916115d59163ffffffff6133ca16565b9063ffffffff6133ca16565b90505b6000821561163d576000888152601f6020526040902060030154611614908590610d1e908663ffffffff6133ca16565b905061163a620f4240610d1e611628611410565b8490620f42400363ffffffff6133ca16565b90505b61164d828263ffffffff61335616565b96505050505050505b92915050565b6a02a055184a310c1260000090565b6116736134c1565b6116de57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f742075706461746564000000000000000000000000000000000000000000604482015290519081900360640190fd5b565b62ed4e0090565b60245481565b602a5481565b62093a8090565b60255481565b635e0580f890565b73ffffffffffffffffffffffffffffffffffffffff1660009081526021602052604090205490565b60008061174b61173e611700565b429063ffffffff61347f16565b9050600061176d61175a611790565b610d1e620f42408563ffffffff6133ca16565b9050620f424081111561178557600092505050610cb3565b620f42400391505090565b63039ada0090565b6117a06118d4565b61180b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b601e5460010190565b601e5481565b60225481565b6000602a54600014156118a457506000610cb3565b602a546118af6116e0565b01421015905090565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff16331490565b60008060008061191b86602060008a81526020019081526020016000206006015460010161352b565b9050600080825b601e548111158015611935575087840181105b15611953576119448a82612e6f565b90920191905060018101611922565b50909891975095509350505050565b602b6020908152600091825260409182902080548351601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018616150201909316929092049182018490048402810184019094528084529091830182828015611a135780601f106119e857610100808354040283529160200191611a13565b820191906000526020600020905b8154815290600101906020018083116119f657829003601f168201915b505050505081565b60275481565b6000606462e4e1c061141a565b61010090565b73ffffffffffffffffffffffffffffffffffffffff831660009081526029602052604081206006810154600590910154829182918290611a7890889060010161352b565b73ffffffffffffffffffffffffffffffffffffffff891660009081526029602052604090206003015490915015611aab57fe5b600080825b601e548111158015611ac3575088840181105b15611b0d5773ffffffffffffffffffffffffffffffffffffffff8b16600090815260296020526040902060040154611afe9086908390612a41565b90920191905060018101611ab0565b5090999198509650945050505050565b6000918252601f602090815260408084209284529190529020805460018201546002830154600390930154919390929190565b3360008181526021602090815260408083205480845291805290912060040154611bdb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f7374616b6572207761736e277420646561637469766174656400000000000000604482015290519081900360640190fd5b611be36116f3565b600082815260208052604090206004015401421015611c6357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e6f7420656e6f7567682074696d652070617373656400000000000000000000604482015290519081900360640190fd5b611c6b6113b6565b600082815260208052604090206003015401611c8561187a565b1015611cf257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6e6f7420656e6f7567682065706f636873207061737365640000000000000000604482015290519081900360640190fd5b60008181526020808052604080832060058101805482548684556001808501889055600285018890556003850188905560048501889055928790556006840187905560078401879055600890930180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055602b9094529184209293929116151590611d809083613849565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260216020526040812055602380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055602454611de1908463ffffffff61347f16565b60245580611e325760405173ffffffffffffffffffffffffffffffffffffffff86169084156108fc029085906000818181858888f19350505050158015611e2c573d6000803e3d6000fd5b50611e36565b8291505b602854611e49908363ffffffff61335616565b60285560408051838152905185917f8c6548258f8f12a9d4b593fa89a223417ed901d4ee9712ba09beb4d56f5262b6919081900360200190a25050505050565b6029602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919087565b60008181526020805260409020600501543390611f4457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7374616b657220646f65736e2774206578697374000000000000000000000000604482015290519081900360640190fd5b600082815260208052604090205415611fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f7374616b65722073686f756c6420626520616374697665000000000000000000604482015290519081900360640190fd5b60008281526020805260409020600401541561203b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f7374616b65722069732064656163746976617465640000000000000000000000604482015290519081900360640190fd5b612043610ca9565b34101561209b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806138e56022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152602960205260409020600401541561213057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f64656c65676174696f6e20616c72656164792065786973747300000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260216020526040902054156121c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f616c7265616479207374616b696e670000000000000000000000000000000000604482015290519081900360640190fd5b60008281526020805260409020600701546121e3903463ffffffff61335616565b612212620f4240610d1e6121f5611409565b60008781526020805260409020600501549063ffffffff6133ca16565b101561227f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f7374616b65722773206c696d6974206973206578636565646564000000000000604482015290519081900360640190fd5b61228761388d565b61228f61187a565b8152426020808301918252346080840181815260c08501878152601e5460a0870190815273ffffffffffffffffffffffffffffffffffffffff881660009081526029865260408082208951815597516001890155808901516002890155606089015160038901559351600488015590516005870155905160069095019490945586845291805291206007015461232a9163ffffffff61335616565b6000848152602080526040902060070155602580546001019055602654612357903463ffffffff61335616565b602655604080513481529051849173ffffffffffffffffffffffffffffffffffffffff8516917ffd8c857fb9acd6f4ad59b8621a2a77825168b7b4b76de9586d08e00d4ed462be9181900360200190a3505050565b336000818152602160209081526040808320548084529180529091206005015461243757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7374616b657220646f65736e2774206578697374000000000000000000000000604482015290519081900360640190fd5b6000818152602080526040902060040154156124b457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f7374616b65722069732064656163746976617465640000000000000000000000604482015290519081900360640190fd5b6124bc61187a565b6000828152602080526040808220600381019390935542600490930192909255905182917f84244546a9da4942f506db48ff90ebc240c73bb399e3e47d58843c6bb60e718591a25050565b336000818152602160205260409020541561258357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f7374616b657220616c7265616479206578697374730000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152602960205260409020600401541561261857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f616c72656164792064656c65676174696e670000000000000000000000000000604482015290519081900360640190fd5b61262061165c565b34101561268e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e73756666696369656e7420616d6f756e7400000000000000000000000000604482015290519081900360640190fd5b602280546001019081905573ffffffffffffffffffffffffffffffffffffffff821660009081526021602090815260408083208490558383529080529020346005909101556126db61187a565b600082815260208052604090206001808201929092554260028201556008810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055601e546006909101556023805490910190556024546127589034613356565b60245560408051348152905173ffffffffffffffffffffffffffffffffffffffff84169183917f0697dfe5062b9db8108e4b31254f47a912ae6bbb78837667b2e923a6f5160d399181900360200190a38251156127b8576127b883611426565b505050565b336000818152602160205260409020546127d5610ca9565b34101561284357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e73756666696369656e7420616d6f756e7400000000000000000000000000604482015290519081900360640190fd5b60008181526020805260409020600501546128bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7374616b657220646f65736e2774206578697374000000000000000000000000604482015290519081900360640190fd5b60008181526020805260409020600401541561293c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f7374616b65722069732064656163746976617465640000000000000000000000604482015290519081900360640190fd5b6000818152602080526040902054156129b657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f7374616b65722073686f756c6420626520616374697665000000000000000000604482015290519081900360640190fd5b60008181526020805260408120600501546129d7903463ffffffff61335616565b60008381526020805260409020600501819055602454909150612a00903463ffffffff61335616565b60245560408051828152346020820152815184927fa1d93e9a2a16bf4c2d0cdc6f47fe0fa054c741c96b3dac1297c79eaca31714e9928290030190a2505050565b600080612a4e8585611569565b6000858152601f60209081526040808320898452909152812080546001909101549293509190612a7e8383613356565b905080612a92576000945050505050612ae4565b6000612ac6620f4240610d1e612ab9612aa9611a21565b620f42409063ffffffff61347f16565b8a9063ffffffff6133ca16565b9050612adc82610d1e878463ffffffff6133ca16565b955050505050505b9392505050565b3360008181526021602052604090205480612b6757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7374616b657220646f65736e2774206578697374000000000000000000000000604482015290519081900360640190fd5b612b6f613540565b612bda57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6265666f7265206d696e696d756d20756e6c6f636b20706572696f6400000000604482015290519081900360640190fd5b6000806000612bea8488886118f2565b600087815260208052604090206006015492955090935091508211612c7057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f65706f636820697320616c726561647920706169640000000000000000000000604482015290519081900360640190fd5b601e54821115612ce157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6675747572652065706f63680000000000000000000000000000000000000000604482015290519081900360640190fd5b81811015612d5057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6e6f2065706f63687320636c61696d6564000000000000000000000000000000604482015290519081900360640190fd5b60008481526020805260408082206006018390555173ffffffffffffffffffffffffffffffffffffffff87169185156108fc02918691818181858888f19350505050158015612da3573d6000803e3d6000fd5b506040805184815260208101849052808201839052905185917f2ea54c2b22a07549d19fb5eb8e4e48ebe1c653117215e94d5468c5612750d35c919081900360600190a250505050505050565b612df86118d4565b612e6357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b612e6c81613558565b50565b600080612e7c8484611569565b6000848152601f60209081526040808320888452909152812080546001909101549293509190612eac8383613356565b905080612ec0576000945050505050611656565b6000612ef1612ee4620f4240610d1e612ed7611a21565b879063ffffffff6133ca16565b859063ffffffff61335616565b9050612f0782610d1e878463ffffffff6133ca16565b98975050505050505050565b33600081815260296020526040902060040154612f9157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f64656c65676174696f6e20646f65736e27742065786973740000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152602960205260409020600301541561302657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f64656c65676174696f6e20697320646561637469766174656400000000000000604482015290519081900360640190fd5b61302e613540565b61309957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6265666f7265206d696e696d756d20756e6c6f636b20706572696f6400000000604482015290519081900360640190fd5b60008060006130a9848787611a34565b73ffffffffffffffffffffffffffffffffffffffff87166000908152602960205260409020600501549295509093509150821161314757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f65706f636820697320616c726561647920706169640000000000000000000000604482015290519081900360640190fd5b601e548211156131b857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6675747572652065706f63680000000000000000000000000000000000000000604482015290519081900360640190fd5b8181101561322757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6e6f2065706f63687320636c61696d6564000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff84166000818152602960205260408082206005018490555185156108fc0291869190818181858888f1935050505015801561327b573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff841660008181526029602090815260409182902060060154825187815291820186905281830185905291519192839290917f2676e1697cf4731b93ddb4ef54e0e5a98c06cccbbbb2202848a3c6286595e6ce919081900360600190a350505050505050565b602080526000908152604090208054600182015460028301546003840154600485015460058601546006870154600788015460089098015496979596949593949293919290919073ffffffffffffffffffffffffffffffffffffffff1689565b600082820183811015612ae457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826133d957506000611656565b828202828482816133e657fe5b0414612ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061392d6021913960400191505060405180910390fd5b6000612ae483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613651565b6000612ae483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061370d565b6000806134cc610cb6565b905060006134d8611730565b90508082101580156134ea5750602a54155b15613503576134f842613781565b600192505050610cb3565b80821080156135135750602a5415155b15613522576134f86000613781565b60009250505090565b600082613539575080611656565b5090919050565b600061354a6134c1565b5061355361188f565b905090565b73ffffffffffffffffffffffffffffffffffffffff81166135c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806139076026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081836136f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156136bc5781810151838201526020016136a4565b50505050905090810190601f1680156136e95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161370357fe5b0495945050505050565b60008184841115613779576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283519092839260449091019190850190808383600083156136bc5781810151838201526020016136a4565b505050900390565b80602a54141561379057612e6c565b602a8190556040805182815290517fe1470d87e1b53ff05cc02eba0dd5210423e111eaad054cfd6752324671d271ec9181900360200190a150565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061380c57805160ff1916838001178555613839565b82800160010185558215613839579182015b8281111561383957825182559160200191906001019061381e565b506138459291506138ca565b5090565b50805460018160011615610100020316600290046000825580601f1061386f5750612e6c565b601f016020900490600052602060002090810190612e6c91906138ca565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b610cb391905b8082111561384557600081556001016138d056fe696e73756666696369656e7420616d6f756e7420666f722064656c65676174696f6e4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a723158202d8390ea4a7b1f50832b25ec3f5a4917f0a83e5e68a3bdc613e832cbf7ccd6e964736f6c634300050b0032")
}

// GetTestContractBinV1 is SFC contract first implementation bin code for testnet
// Must be compiled with bin-runtime flag
func GetTestContractBinV1() []byte {
    return hexutil.MustDecode("0x6080604052600436106103605760003560e01c8063715018a6116101c6578063bed9d861116100f7578063e895798811610095578063f2fde38b1161006f578063f2fde38b14610b82578063f70f53e014610bc2578063f99837e614610bf2578063fd5e6dd114610c2257610360565b8063e895798814610b1c578063ec6a7f1c14610662578063f0f947c814610b5257610360565b8063c41b6405116100d1578063c41b640514610a59578063c4b5dd7e14610365578063cc8c212014610a6e578063d9e257ef14610b1457610360565b8063bed9d861146109af578063bffe3486146109c4578063c312eb0714610a3c57610360565b806396060e7111610164578063a77865151161013e578063a7786515146108e3578063ab2273c0146108f8578063b6732f3d1461090d578063b9029d501461095957610360565b806396060e71146107db57806398ec2de51461082f578063a70da4d2146108ce57610360565b806381d9dc7a116101a057806381d9dc7a1461074a5780638447c4df1461075f5780638da5cb5b146107885780638f32d59b146107c657610360565b8063715018a61461070b57806376671808146107205780637cacb1d61461073557610360565b806333a14912116102a05780633fee10a81161023e57806354d77ed21161021857806354d77ed21461045157806363321e27146106a15780636a1cf400146106e15780636cf6d675146106f657610360565b80633fee10a8146106625780634bd202dc1461067757806353a725861461068c57610360565b8063391909391161027a578063391909391461060e5780633a0af4d4146106235780633d0317fe146106385780633f4ef95f1461064d57610360565b806333a14912146105165780633594a5d2146105c9578063375b3c0a146105f957610360565b80631b593d8a1161030d5780631e8a6956116102e75780631e8a6956146104665780632265f284146104d75780632709275e146104ec57806330fa99291461050157610360565b80631b593d8a146104125780631c3333181461043c5780631d58179c1461045157610360565b80630a29180c1161033e5780630a29180c146103b6578063119e351a146103cb57806316bfdd81146103fd57610360565b80630298599214610365578063041d97a31461038c57806308728f6e146103a1575b600080fd5b34801561037157600080fd5b5061037a610ca9565b60408051918252519081900360200190f35b34801561039857600080fd5b5061037a610cb6565b3480156103ad57600080fd5b5061037a610d31565b3480156103c257600080fd5b5061037a610d37565b3480156103d757600080fd5b506103fb600480360360408110156103ee57600080fd5b5080359060200135610d3d565b005b34801561040957600080fd5b506103fb610def565b34801561041e57600080fd5b506103fb6004803603602081101561043557600080fd5b5035611124565b34801561044857600080fd5b506103fb6111cd565b34801561045d57600080fd5b5061037a6113b6565b34801561047257600080fd5b506104906004803603602081101561048957600080fd5b50356113bb565b60408051998a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e084015261010083015251908190036101200190f35b3480156104e357600080fd5b5061037a611409565b3480156104f857600080fd5b5061037a611410565b34801561050d57600080fd5b5061037a611420565b34801561052257600080fd5b506103fb6004803603602081101561053957600080fd5b81019060208101813564010000000081111561055457600080fd5b82018360208201111561056657600080fd5b8035906020019184600183028401116401000000008311171561058857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611426945050505050565b3480156105d557600080fd5b5061037a600480360360408110156105ec57600080fd5b5080359060200135611569565b34801561060557600080fd5b5061037a61165c565b34801561061a57600080fd5b506103fb61166b565b34801561062f57600080fd5b5061037a6116e0565b34801561064457600080fd5b5061037a6116e7565b34801561065957600080fd5b5061037a6116ed565b34801561066e57600080fd5b5061037a6116f3565b34801561068357600080fd5b5061037a6116f8565b34801561069857600080fd5b5061037a6116fe565b3480156106ad57600080fd5b5061037a600480360360208110156106c457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611706565b3480156106ed57600080fd5b5061037a61172e565b34801561070257600080fd5b5061037a61178e565b34801561071757600080fd5b506103fb611796565b34801561072c57600080fd5b5061037a611878565b34801561074157600080fd5b5061037a611881565b34801561075657600080fd5b5061037a611887565b34801561076b57600080fd5b5061077461188d565b604080519115158252519081900360200190f35b34801561079457600080fd5b5061079d6118b6565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156107d257600080fd5b506107746118d2565b3480156107e757600080fd5b50610811600480360360608110156107fe57600080fd5b50803590602081013590604001356118f0565b60408051938452602084019290925282820152519081900360600190f35b34801561083b57600080fd5b506108596004803603602081101561085257600080fd5b5035611960565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561089357818101518382015260200161087b565b50505050905090810190601f1680156108c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108da57600080fd5b5061037a611a19565b3480156108ef57600080fd5b5061037a611a1f565b34801561090457600080fd5b5061037a611a2c565b34801561091957600080fd5b506108116004803603606081101561093057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060400135611a32565b34801561096557600080fd5b506109896004803603604081101561097c57600080fd5b5080359060200135611b1b565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156109bb57600080fd5b506103fb611b4e565b3480156109d057600080fd5b50610a04600480360360208110156109e757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611e87565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b6103fb60048036036020811015610a5257600080fd5b5035611ec4565b348015610a6557600080fd5b506103fb6123aa565b6103fb60048036036020811015610a8457600080fd5b810190602081018135640100000000811115610a9f57600080fd5b820183602082011115610ab157600080fd5b80359060200191846001830284011164010000000083111715610ad357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612505945050505050565b6103fb6127bb565b348015610b2857600080fd5b5061037a60048036036060811015610b3f57600080fd5b5080359060208101359060400135612a3f565b348015610b5e57600080fd5b506103fb60048036036040811015610b7557600080fd5b5080359060200135612ae9565b348015610b8e57600080fd5b506103fb60048036036020811015610ba557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612dee565b348015610bce57600080fd5b5061037a60048036036040811015610be557600080fd5b5080359060200135612e6d565b348015610bfe57600080fd5b506103fb60048036036040811015610c1557600080fd5b5080359060200135612f11565b348015610c2e57600080fd5b50610c4c60048036036020811015610c4557600080fd5b50356132f4565b60408051998a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e084015273ffffffffffffffffffffffffffffffffffffffff1661010083015251908190036101200190f35b670de0b6b3a76400005b90565b601e546000908152601f602052604081206009015480610cda576000915050610cb3565b601e546000908152601f602052604081206008810154600790910154610d059163ffffffff61335416565b9050610d2a82610d1e83620f424063ffffffff6133c816565b9063ffffffff61343b16565b9250505090565b60235481565b60285481565b610d456118d2565b610db057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b604080518381526020810183905281517f95ae5488127de4bc98492f4487556e7af9f37eb4b6d5e94f6d849e03ff76cc7c929181900390910190a15050565b33600081815260296020526040902060030154610e6d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f64656c65676174696f6e207761736e2774206465616374697661746564000000604482015290519081900360640190fd5b610e756116f3565b73ffffffffffffffffffffffffffffffffffffffff821660009081526029602052604090206003015401421015610f0d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e6f7420656e6f7567682074696d652070617373656400000000000000000000604482015290519081900360640190fd5b610f156113b6565b73ffffffffffffffffffffffffffffffffffffffff821660009081526029602052604090206002015401610f47611878565b1015610fb457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6e6f7420656e6f7567682065706f636873207061737365640000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260296020818152604080842060068101805480875284805292862054968652939092526004820180548584556001808501879055600285018790556003850187905591869055600590930185905592849055602580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190556026549094909216151591611065908263ffffffff61347d16565b602655816110b65760405173ffffffffffffffffffffffffffffffffffffffff86169082156108fc029083906000818181858888f193505050501580156110b0573d6000803e3d6000fd5b506110ba565b8092505b6027546110cd908463ffffffff61335416565b602755604080518481529051859173ffffffffffffffffffffffffffffffffffffffff8816917f87e86b3710b72c10173ca52c6a9f9cf2df27e77ed177741a8b4feb12bb7a606f9181900360200190a35050505050565b61112c6118d2565b61119757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6040805182815290517f8cd9dae1bbea2bc8a5e80ffce2c224727a25925130a03ae100619a8861ae23969181900360200190a150565b3360008181526029602052604090206004015461124b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f64656c65676174696f6e20646f65736e27742065786973740000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260296020526040902060030154156112e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f64656c65676174696f6e20697320646561637469766174656400000000000000604482015290519081900360640190fd5b6112e8611878565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260296020908152604080832060028101949094554260038501556006840154600490940154848452918052909120600501541561136e57600082815260208052604090206007015461135c908263ffffffff61347d16565b60008381526020805260409020600701555b604051829073ffffffffffffffffffffffffffffffffffffffff8516907f5b1eea49e405ef6d509836aac841959c30bb0673b1fd70859bfc6ae5e4ee3df290600090a3505050565b600390565b601f6020528060005260406000206000915090508060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154908060090154905089565b62e4e1c090565b600060646301c9c3805b04905090565b60265481565b33600081815260216020526040902054806114a257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7374616b657220646f65736e2774206578697374000000000000000000000000604482015290519081900360640190fd5b6114aa611a2c565b8351111561151957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f746f6f20626967206d6574616461746100000000000000000000000000000000604482015290519081900360640190fd5b6000818152602b602090815260409091208451611538928601906137c9565b5060405181907fb7a99a0df6a9e15c2689e6a55811ef76cdb514c67d4a0e37fcb125ada0e3cd8390600090a2505050565b6000818152601f6020908152604080832060048101548685529281905290832060028101546005909201546003909101548483156115e4576000878152601f6020526040902060068101546002909101546115e1918791610d1e9188916115d59163ffffffff6133c816565b9063ffffffff6133c816565b90505b6000821561163d576000888152601f6020526040902060030154611614908590610d1e908663ffffffff6133c816565b905061163a620f4240610d1e611628611410565b8490620f42400363ffffffff6133c816565b90505b61164d828263ffffffff61335416565b96505050505050505b92915050565b6a02a055184a310c1260000090565b6116736134bf565b6116de57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f742075706461746564000000000000000000000000000000000000000000604482015290519081900360640190fd5b565b62ed4e0090565b60245481565b602a5481565b603c90565b60255481565b635e0580f890565b73ffffffffffffffffffffffffffffffffffffffff1660009081526021602052604090205490565b60008061174961173c6116fe565b429063ffffffff61347d16565b9050600061176b61175861178e565b610d1e620f42408563ffffffff6133c816565b9050620f424081111561178357600092505050610cb3565b620f42400391505090565b63039ada0090565b61179e6118d2565b61180957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b601e5460010190565b601e5481565b60225481565b6000602a54600014156118a257506000610cb3565b602a546118ad6116e0565b01421015905090565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff16331490565b60008060008061191986602060008a815260200190815260200160002060060154600101613529565b9050600080825b601e548111158015611933575087840181105b15611951576119428a82612e6d565b90920191905060018101611920565b50909891975095509350505050565b602b6020908152600091825260409182902080548351601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018616150201909316929092049182018490048402810184019094528084529091830182828015611a115780601f106119e657610100808354040283529160200191611a11565b820191906000526020600020905b8154815290600101906020018083116119f457829003601f168201915b505050505081565b60275481565b6000606462e4e1c061141a565b61010090565b73ffffffffffffffffffffffffffffffffffffffff831660009081526029602052604081206006810154600590910154829182918290611a76908890600101613529565b73ffffffffffffffffffffffffffffffffffffffff891660009081526029602052604090206003015490915015611aa957fe5b600080825b601e548111158015611ac1575088840181105b15611b0b5773ffffffffffffffffffffffffffffffffffffffff8b16600090815260296020526040902060040154611afc9086908390612a3f565b90920191905060018101611aae565b5090999198509650945050505050565b6000918252601f602090815260408084209284529190529020805460018201546002830154600390930154919390929190565b3360008181526021602090815260408083205480845291805290912060040154611bd957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f7374616b6572207761736e277420646561637469766174656400000000000000604482015290519081900360640190fd5b611be16116f3565b600082815260208052604090206004015401421015611c6157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e6f7420656e6f7567682074696d652070617373656400000000000000000000604482015290519081900360640190fd5b611c696113b6565b600082815260208052604090206003015401611c83611878565b1015611cf057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6e6f7420656e6f7567682065706f636873207061737365640000000000000000604482015290519081900360640190fd5b60008181526020808052604080832060058101805482548684556001808501889055600285018890556003850188905560048501889055928790556006840187905560078401879055600890930180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055602b9094529184209293929116151590611d7e9083613847565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260216020526040812055602380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055602454611ddf908463ffffffff61347d16565b60245580611e305760405173ffffffffffffffffffffffffffffffffffffffff86169084156108fc029085906000818181858888f19350505050158015611e2a573d6000803e3d6000fd5b50611e34565b8291505b602854611e47908363ffffffff61335416565b60285560408051838152905185917f8c6548258f8f12a9d4b593fa89a223417ed901d4ee9712ba09beb4d56f5262b6919081900360200190a25050505050565b6029602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919087565b60008181526020805260409020600501543390611f4257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7374616b657220646f65736e2774206578697374000000000000000000000000604482015290519081900360640190fd5b600082815260208052604090205415611fbc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f7374616b65722073686f756c6420626520616374697665000000000000000000604482015290519081900360640190fd5b60008281526020805260409020600401541561203957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f7374616b65722069732064656163746976617465640000000000000000000000604482015290519081900360640190fd5b612041610ca9565b341015612099576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806138e36022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152602960205260409020600401541561212e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f64656c65676174696f6e20616c72656164792065786973747300000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260216020526040902054156121c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f616c7265616479207374616b696e670000000000000000000000000000000000604482015290519081900360640190fd5b60008281526020805260409020600701546121e1903463ffffffff61335416565b612210620f4240610d1e6121f3611409565b60008781526020805260409020600501549063ffffffff6133c816565b101561227d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f7374616b65722773206c696d6974206973206578636565646564000000000000604482015290519081900360640190fd5b61228561388b565b61228d611878565b8152426020808301918252346080840181815260c08501878152601e5460a0870190815273ffffffffffffffffffffffffffffffffffffffff88166000908152602986526040808220895181559751600189015580890151600289015560608901516003890155935160048801559051600587015590516006909501949094558684529180529120600701546123289163ffffffff61335416565b6000848152602080526040902060070155602580546001019055602654612355903463ffffffff61335416565b602655604080513481529051849173ffffffffffffffffffffffffffffffffffffffff8516917ffd8c857fb9acd6f4ad59b8621a2a77825168b7b4b76de9586d08e00d4ed462be9181900360200190a3505050565b336000818152602160209081526040808320548084529180529091206005015461243557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7374616b657220646f65736e2774206578697374000000000000000000000000604482015290519081900360640190fd5b6000818152602080526040902060040154156124b257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f7374616b65722069732064656163746976617465640000000000000000000000604482015290519081900360640190fd5b6124ba611878565b6000828152602080526040808220600381019390935542600490930192909255905182917f84244546a9da4942f506db48ff90ebc240c73bb399e3e47d58843c6bb60e718591a25050565b336000818152602160205260409020541561258157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f7374616b657220616c7265616479206578697374730000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152602960205260409020600401541561261657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f616c72656164792064656c65676174696e670000000000000000000000000000604482015290519081900360640190fd5b61261e61165c565b34101561268c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e73756666696369656e7420616d6f756e7400000000000000000000000000604482015290519081900360640190fd5b602280546001019081905573ffffffffffffffffffffffffffffffffffffffff821660009081526021602090815260408083208490558383529080529020346005909101556126d9611878565b600082815260208052604090206001808201929092554260028201556008810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055601e546006909101556023805490910190556024546127569034613354565b60245560408051348152905173ffffffffffffffffffffffffffffffffffffffff84169183917f0697dfe5062b9db8108e4b31254f47a912ae6bbb78837667b2e923a6f5160d399181900360200190a38251156127b6576127b683611426565b505050565b336000818152602160205260409020546127d3610ca9565b34101561284157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e73756666696369656e7420616d6f756e7400000000000000000000000000604482015290519081900360640190fd5b60008181526020805260409020600501546128bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7374616b657220646f65736e2774206578697374000000000000000000000000604482015290519081900360640190fd5b60008181526020805260409020600401541561293a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f7374616b65722069732064656163746976617465640000000000000000000000604482015290519081900360640190fd5b6000818152602080526040902054156129b457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f7374616b65722073686f756c6420626520616374697665000000000000000000604482015290519081900360640190fd5b60008181526020805260408120600501546129d5903463ffffffff61335416565b600083815260208052604090206005018190556024549091506129fe903463ffffffff61335416565b60245560408051828152346020820152815184927fa1d93e9a2a16bf4c2d0cdc6f47fe0fa054c741c96b3dac1297c79eaca31714e9928290030190a2505050565b600080612a4c8585611569565b6000858152601f60209081526040808320898452909152812080546001909101549293509190612a7c8383613354565b905080612a90576000945050505050612ae2565b6000612ac4620f4240610d1e612ab7612aa7611a1f565b620f42409063ffffffff61347d16565b8a9063ffffffff6133c816565b9050612ada82610d1e878463ffffffff6133c816565b955050505050505b9392505050565b3360008181526021602052604090205480612b6557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7374616b657220646f65736e2774206578697374000000000000000000000000604482015290519081900360640190fd5b612b6d61353e565b612bd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6265666f7265206d696e696d756d20756e6c6f636b20706572696f6400000000604482015290519081900360640190fd5b6000806000612be88488886118f0565b600087815260208052604090206006015492955090935091508211612c6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f65706f636820697320616c726561647920706169640000000000000000000000604482015290519081900360640190fd5b601e54821115612cdf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6675747572652065706f63680000000000000000000000000000000000000000604482015290519081900360640190fd5b81811015612d4e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6e6f2065706f63687320636c61696d6564000000000000000000000000000000604482015290519081900360640190fd5b60008481526020805260408082206006018390555173ffffffffffffffffffffffffffffffffffffffff87169185156108fc02918691818181858888f19350505050158015612da1573d6000803e3d6000fd5b506040805184815260208101849052808201839052905185917f2ea54c2b22a07549d19fb5eb8e4e48ebe1c653117215e94d5468c5612750d35c919081900360600190a250505050505050565b612df66118d2565b612e6157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b612e6a81613556565b50565b600080612e7a8484611569565b6000848152601f60209081526040808320888452909152812080546001909101549293509190612eaa8383613354565b905080612ebe576000945050505050611656565b6000612eef612ee2620f4240610d1e612ed5611a1f565b879063ffffffff6133c816565b859063ffffffff61335416565b9050612f0582610d1e878463ffffffff6133c816565b98975050505050505050565b33600081815260296020526040902060040154612f8f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f64656c65676174696f6e20646f65736e27742065786973740000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152602960205260409020600301541561302457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f64656c65676174696f6e20697320646561637469766174656400000000000000604482015290519081900360640190fd5b61302c61353e565b61309757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6265666f7265206d696e696d756d20756e6c6f636b20706572696f6400000000604482015290519081900360640190fd5b60008060006130a7848787611a32565b73ffffffffffffffffffffffffffffffffffffffff87166000908152602960205260409020600501549295509093509150821161314557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f65706f636820697320616c726561647920706169640000000000000000000000604482015290519081900360640190fd5b601e548211156131b657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6675747572652065706f63680000000000000000000000000000000000000000604482015290519081900360640190fd5b8181101561322557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6e6f2065706f63687320636c61696d6564000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff84166000818152602960205260408082206005018490555185156108fc0291869190818181858888f19350505050158015613279573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff841660008181526029602090815260409182902060060154825187815291820186905281830185905291519192839290917f2676e1697cf4731b93ddb4ef54e0e5a98c06cccbbbb2202848a3c6286595e6ce919081900360600190a350505050505050565b602080526000908152604090208054600182015460028301546003840154600485015460058601546006870154600788015460089098015496979596949593949293919290919073ffffffffffffffffffffffffffffffffffffffff1689565b600082820183811015612ae257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826133d757506000611656565b828202828482816133e457fe5b0414612ae2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061392b6021913960400191505060405180910390fd5b6000612ae283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061364f565b6000612ae283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061370b565b6000806134ca610cb6565b905060006134d661172e565b90508082101580156134e85750602a54155b15613501576134f64261377f565b600192505050610cb3565b80821080156135115750602a5415155b15613520576134f6600061377f565b60009250505090565b600082613537575080611656565b5090919050565b60006135486134bf565b5061355161188d565b905090565b73ffffffffffffffffffffffffffffffffffffffff81166135c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806139056026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081836136f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156136ba5781810151838201526020016136a2565b50505050905090810190601f1680156136e75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161370157fe5b0495945050505050565b60008184841115613777576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283519092839260449091019190850190808383600083156136ba5781810151838201526020016136a2565b505050900390565b80602a54141561378e57612e6a565b602a8190556040805182815290517fe1470d87e1b53ff05cc02eba0dd5210423e111eaad054cfd6752324671d271ec9181900360200190a150565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061380a57805160ff1916838001178555613837565b82800160010185558215613837579182015b8281111561383757825182559160200191906001019061381c565b506138439291506138c8565b5090565b50805460018160011615610100020316600290046000825580601f1061386d5750612e6a565b601f016020900490600052602060002090810190612e6a91906138c8565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b610cb391905b8082111561384357600081556001016138ce56fe696e73756666696369656e7420616d6f756e7420666f722064656c65676174696f6e4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a72315820d8251db57233b10409d5368c9adf0c40b0074429596c820da72c30de832aba9764736f6c634300050b0032")
}

// ContractAddress is the SFC proxy contract address
var ContractAddress = common.HexToAddress("0xfc00face00000000000000000000000000000000")

// the SFC contract first implementation address
var ContractAddressV1 = common.HexToAddress("0xfc00beef00000000000000000000000000000101")

// AssembleStorage builds genesis storage for the SFC contract
func AssembleStorage(validators pos.GValidators, genesisTime inter.Timestamp, owner common.Address, storage map[common.Hash]common.Hash) map[common.Hash]common.Hash {
    if storage == nil {
        storage = make(map[common.Hash]common.Hash)
    }

    // set validators
    maxStakerID := idx.StakerID(0)
    for _, validator := range validators {
        stakePos := sfcpos.Staker(validator.ID)

        stakeAmount := utils.BigTo256(validator.Stake)

        storage[stakePos.StakeAmount()] = stakeAmount
        storage[stakePos.CreatedEpoch()] = utils.U64to256(0)
        storage[stakePos.CreatedTime()] = utils.U64to256(uint64(genesisTime.Unix()))
        storage[stakePos.Address()] = validator.Address.Hash()

        stakerIDPos := sfcpos.StakerID(validator.Address)
        storage[stakerIDPos] = utils.U64to256(uint64(validator.ID))

        if maxStakerID < validator.ID {
            maxStakerID = validator.ID
        }
    }

    storage[sfcpos.Owner()] = owner.Hash()
    storage[sfcpos.StakersNum()] = utils.U64to256(uint64(len(validators)))
    storage[sfcpos.StakersLastID()] = utils.U64to256(uint64(maxStakerID))
    storage[sfcpos.StakeTotalAmount()] = utils.BigTo256(validators.TotalStake())

    return storage
}