diff --git a/Makefile b/Makefile index c18cdddea9..fb0739d214 100644 --- a/Makefile +++ b/Makefile @@ -37,6 +37,9 @@ geth-linux-arm64: all: $(GORUN) build/ci.go install +all-static: + $(GORUN) build/ci.go install -static + android: $(GORUN) build/ci.go aar --local @echo "Done building." diff --git a/cmd/genesis-gen/README.md b/cmd/genesis-gen/README.md new file mode 100644 index 0000000000..f7ca787be2 --- /dev/null +++ b/cmd/genesis-gen/README.md @@ -0,0 +1,23 @@ +genesis-gen +====== + +genesis-gen is a simple command-line tool for working with Dogechain genesis files. + +# Usage + +simple 4 validators genesis file: + +```sh +$ genesis-gen --chain-id 23347 \ + --epoch-size 300 \ + --validator 0xC035596a28ed3C5E357baf2860baCB6d665E81d5 \ + --validator 0x20E088469849516610a759C7Bd60434298a91589 \ + --validator 0x8F869426530DC8653d347B64be1A9420d5F8eD89 \ + --validator 0xcB4a9D4419f1cE42E5AC993A6E571C7587474C6E \ + --premine 0x23d7B7be9B63e63F2e76b39bEA23BcD517731a0b:0x3635C9ADC5DEA0000000 \ + --premine 0x612C307ae887230B3A5c7B0F93DeF10FF65cb722:0x3635C9ADC5DEA0000000 \ + --premine 0x3e6e4eA30e00965d902718c04095d2934366407A:0x3635C9ADC5DEA0000000 \ + --premine 0x21dc979ebc01E2dAED3f0792C13513CBe379E49A:0x3635C9ADC5DEA0000000 \ + --validatorset-owner 0x20E088469849516610a759C7Bd60434298a91589 +``` + \ No newline at end of file diff --git a/cmd/genesis-gen/bridge.go b/cmd/genesis-gen/bridge.go new file mode 100644 index 0000000000..a7ae33d18f --- /dev/null +++ b/cmd/genesis-gen/bridge.go @@ -0,0 +1,128 @@ +package main + +import ( + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/dccontracts" + "github.com/ethereum/go-ethereum/crypto" +) + +var ( + DefaultBridgeThreshold = "0x56bc75e2d63100000" // 100 wDoge + DefaultBridgeRate = 100 // 1% +) + +// Slot definitions for SC storage +const ( + ownerSlot = int64(iota) // Slot 0 + minimumThresholdSlot + signersSlot + addressToIsSignerSlot + addressToSignerIndexSlot + // ordersSlot // too complicated, would not be set + // totalSupplySlot // would not be set + rateSlot = int64(iota + 2) +) + +// StorageIndexes is a wrapper for different storage indexes that +// need to be modified +type StorageIndexes struct { + bridgeOwnerIndex []byte // address + bridgeMinimumThresholdIndex []byte // uint256 + bridgeSignersIndex []byte // []address + bridgeSignersArraySizeIndex []byte // []address size + bridgeAddressToIsSignerIndex []byte // mapping(address => bool) + bridgeAddressToSignerIndexIndex []byte // mapping(address => uint256) + bridgeRateIndex []byte // uint256 +} + +// getStorageIndexes is a helper function for getting the correct indexes +// of the storage slots which need to be modified during bootstrap. +// +// It is SC dependant, and based on the SC located at: +// https://github.com/dogechain-lab/dogechain-contracts/ +func getStorageIndexes(address common.Address, index int64) *StorageIndexes { + storageIndexes := StorageIndexes{} + + // Get the indexes for _owner, _minimumThreshold + // Index for regular types is calculated as just the regular slot + storageIndexes.bridgeOwnerIndex = big.NewInt(ownerSlot).Bytes() + storageIndexes.bridgeMinimumThresholdIndex = big.NewInt(minimumThresholdSlot).Bytes() + storageIndexes.bridgeRateIndex = big.NewInt(rateSlot).Bytes() + + // Get the indexes for the mappings + // The index for the mapping is retrieved with: + // keccak(address . slot) + // . stands for concatenation (basically appending the bytes) + storageIndexes.bridgeAddressToIsSignerIndex = getAddressMapping(address, addressToIsSignerSlot) + storageIndexes.bridgeAddressToSignerIndexIndex = getAddressMapping(address, addressToSignerIndexSlot) + + // Index for array types is calculated as keccak(slot) + index + // The slot for the dynamic arrays that's put in the keccak needs to be in hex form (padded 64 chars) + storageIndexes.bridgeSignersIndex = getIndexWithOffset( + crypto.Keccak256(PadLeftOrTrim(big.NewInt(signersSlot).Bytes(), 32)), + index, + ) + + // For any dynamic array in Solidity, the size of the actual array should be + // located on slot x + storageIndexes.bridgeSignersArraySizeIndex = []byte{byte(signersSlot)} + + return &storageIndexes +} + +// predeployBridgeSC is a helper method for setting up the bridge smart contract account, +// using the passed in owner and signers as pre-defined accounts. +func predeployBridgeSC(owner common.Address, signers []common.Address) *core.GenesisAccount { + // Set the code for the bridge smart contract + // Code retrieved from https://github.com/dogechain-lab/dogechain-contracts + bridgeAccount := &core.GenesisAccount{ + Code: dccontracts.DCBridgeContractByteCode, + } + + bigDefaultRate := big.NewInt(int64(DefaultBridgeRate)) + bigTrueValue := big.NewInt(1) + + // Generate the empty account storage map + storageMap := make(map[common.Hash]common.Hash) + + for indx, signer := range signers { + // Get the storage indexes + storageIndexes := getStorageIndexes(signer, int64(indx)) + + // Set the value for the owner + storageMap[common.BytesToHash(storageIndexes.bridgeOwnerIndex)] = + common.BytesToHash(owner.Bytes()) + + // Set the value for the minimum threshold + storageMap[common.BytesToHash(storageIndexes.bridgeMinimumThresholdIndex)] = + common.HexToHash(DefaultBridgeThreshold) + + // Set the value for the signers array + storageMap[common.BytesToHash(storageIndexes.bridgeSignersIndex)] = + common.BytesToHash(signer.Bytes()) + + // Set the value for the size of the signers array + storageMap[common.BytesToHash(storageIndexes.bridgeSignersArraySizeIndex)] = + common.BigToHash(new(big.Int).SetUint64(uint64(indx + 1))) + + // Set the value for the address -> is signer mapping + storageMap[common.BytesToHash(storageIndexes.bridgeAddressToIsSignerIndex)] = + common.BytesToHash(bigTrueValue.Bytes()) + + // Set the value for the address -> signer array index mapping + storageMap[common.BytesToHash(storageIndexes.bridgeAddressToSignerIndexIndex)] = + common.BigToHash(new(big.Int).SetUint64(uint64(indx))) + + // Set the value for the rate + storageMap[common.BytesToHash(storageIndexes.bridgeRateIndex)] = + common.BytesToHash(bigDefaultRate.Bytes()) + } + + // Save the storage map + bridgeAccount.Storage = storageMap + + return bridgeAccount +} diff --git a/cmd/genesis-gen/main.go b/cmd/genesis-gen/main.go new file mode 100644 index 0000000000..44d96415f1 --- /dev/null +++ b/cmd/genesis-gen/main.go @@ -0,0 +1,273 @@ +// Copyright 2023 The go-ethereum Authors and BSC Authors and DBSC Authors +// This file is part of DBSC. +// +// DBSC is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// DBSC is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with DBSC. If not, see . + +package main + +import ( + "encoding/json" + "fmt" + "math/big" + "os" + "strings" + + "github.com/ethereum/go-ethereum/consensus/ibft" + "github.com/ethereum/go-ethereum/core/dccontracts" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rlp" + + "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/internal/flags" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "gopkg.in/urfave/cli.v1" +) + +var ( + // Git SHA1 commit hash of the release (set via linker flags) + gitCommit = "" + gitDate = "" + + app *cli.App + + // Flags needed by genesis-gen + chainIDFlag = cli.Uint64Flag{ + Name: "chain-id", + Usage: "Chain ID of the genesis block", + Value: 668, + } + timestampFlag = cli.Uint64Flag{ + Name: "timestamp", + Usage: "Timestamp of the genesis block", + Value: 0, + } + epochSizeFlag = cli.Uint64Flag{ + Name: "epoch-size", + Usage: "The epoch size for the chain", + Value: 7200, + } + gasLimitFlag = cli.Uint64Flag{ + Name: "gas-limit", + Usage: "The maximum amount of gas used by all transactions in a block", + Value: 5242880, // 0x500000 + } + gasUsedFlag = cli.Uint64Flag{ + Name: "gas-used", + Usage: "Gas used of the block", + Value: 458752, // 0x70000 + } + validatorFlags = cli.StringSliceFlag{ + Name: "validator", + Usage: "The validator address and public key, This flag can be used multiple times", + } + premineFlags = cli.StringSliceFlag{ + Name: "premine", + Usage: "The premine address and amount formatted as address:amount, This flag can be used multiple times", + } + validatorsetOwnerFlag = cli.StringFlag{ + Name: "validatorset-owner", + Usage: "The system ValidatorSet contract owner address", + } + bridgeOwnerFlag = cli.StringFlag{ + Name: "bridge-owner", + Usage: "The system bridge contract owner address", + } + bridgeSignersFlag = cli.StringSliceFlag{ + Name: "bridge-signer", + Usage: "The system bridge contract signer address. This flag can be used multiple times", + } + vaultOwnerFlag = cli.StringFlag{ + Name: "vault-owner", + Usage: "The system vault contract owner address", + } + outputFileFlag = cli.StringFlag{ + Name: "output", + Usage: "The output file to write the genesis.json to", + Value: "genesis.json", + } +) + +func init() { + app = flags.NewApp(gitCommit, gitDate, "Generate genesis block for DBSC") + app.Flags = []cli.Flag{ + chainIDFlag, + timestampFlag, + epochSizeFlag, + gasLimitFlag, + gasUsedFlag, + validatorFlags, + premineFlags, + validatorsetOwnerFlag, + bridgeOwnerFlag, + bridgeSignersFlag, + vaultOwnerFlag, + outputFileFlag, + } + app.Action = utils.MigrateFlags(genesisGen) + cli.CommandHelpTemplate = flags.OriginCommandHelpTemplate +} + +func genesisGen(c *cli.Context) error { + var ( + validators = c.GlobalStringSlice(validatorFlags.Name) + premineList = c.GlobalStringSlice(premineFlags.Name) + bridgeSigners = c.GlobalStringSlice(bridgeSignersFlag.Name) + ) + + if len(validators) == 0 { + return fmt.Errorf("no validators specified") + } + if len(premineList) == 0 { + log.Warn("no premine specified") + } + if !c.GlobalIsSet(validatorsetOwnerFlag.Name) { + return fmt.Errorf("system ValidatorSet contract owner address is not specified") + } + + bridgeOwner := common.Address{} + if c.GlobalIsSet(bridgeOwnerFlag.Name) { + bridgeOwner = common.HexToAddress(c.GlobalString(bridgeOwnerFlag.Name)) + } else { + log.Warn("system bridge contract owner address is not specified") + } + + vaultOwner := common.Address{} + if c.GlobalIsSet(vaultOwnerFlag.Name) { + vaultOwner = common.HexToAddress(c.GlobalString(vaultOwnerFlag.Name)) + } else { + log.Warn("system vault contract owner address is not specified") + } + + if len(bridgeSigners) == 0 { + log.Warn("no bridge signers specified") + } + + chainConfig := ¶ms.ChainConfig{ + ChainID: new(big.Int).SetUint64(c.GlobalUint64(chainIDFlag.Name)), + HomesteadBlock: big.NewInt(0), + EIP150Block: big.NewInt(0), + EIP155Block: big.NewInt(0), + EIP158Block: big.NewInt(0), + IBFTBlock: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), + ConstantinopleBlock: big.NewInt(0), + PetersburgBlock: big.NewInt(0), + IstanbulBlock: big.NewInt(0), + PreportlandBlock: big.NewInt(1), // dogechain system contract upgrade + PortlandBlock: big.NewInt(2), + DetroitBlock: big.NewInt(3), + // TODO: Add hawaii hard fork + // HawaiiBlock: big.NewInt(4), + IBFT: ¶ms.IBFTConfig{ + EpochSize: c.GlobalUint64(epochSizeFlag.Name), + Type: params.IBFTPoS, + }, + } + + genesis := &core.Genesis{ + Config: chainConfig, + Nonce: 0, + Timestamp: c.GlobalUint64(timestampFlag.Name), + GasLimit: c.GlobalUint64(gasLimitFlag.Name), + GasUsed: c.GlobalUint64(gasUsedFlag.Name), + Difficulty: big.NewInt(1), + ParentHash: common.Hash{}, + Mixhash: common.Hash{}, + Coinbase: common.Address{}, + } + + // GenesisAlloc + genesis.Alloc = make(core.GenesisAlloc) + + validatorsAddress := make([]common.Address, 0, len(validators)) + for _, validator := range validators { + validatorsAddress = append(validatorsAddress, common.HexToAddress(validator)) + } + + validatorsAlloc, err := predeployValidatorSet( + common.HexToAddress(c.GlobalString(validatorsetOwnerFlag.Name)), + validatorsAddress, + ) + if err != nil { + return err + } + + bridgeSignersAddress := make([]common.Address, 0, len(bridgeSigners)) + for _, signer := range bridgeSigners { + bridgeSignersAddress = append(bridgeSignersAddress, common.HexToAddress(signer)) + } + + genesis.Alloc[common.HexToAddress(dccontracts.DCBridgeContract)] = *(predeployBridgeSC(bridgeOwner, bridgeSignersAddress)) + genesis.Alloc[common.HexToAddress(dccontracts.DCValidatorSetContract)] = *validatorsAlloc + genesis.Alloc[common.HexToAddress(dccontracts.DCVaultContract)] = *(predeployVaultSC(vaultOwner)) + + for _, premine := range premineList { + var addr common.Address + var val string + + if indx := strings.Index(premine, ":"); indx != -1 { + // : + addr, val = common.HexToAddress(premine[:indx]), premine[indx+1:] + } else { + log.Error(fmt.Sprintf("premine format error: %s", premine)) + } + + amount, err := ParseUint256orHex(&val) + if err != nil { + return fmt.Errorf("failed to parse amount %s: %w", val, err) + } + + genesis.Alloc[addr] = core.GenesisAccount{ + Balance: amount, + } + } + + genesis.ExtraData = make([]byte, ibft.ExtraVanity) + ibftExtra := &types.IBFTExtra{ + Validators: validatorsAddress, + Seal: []byte{}, + CommittedSeal: [][]byte{}, + } + + extraData, err := rlp.EncodeToBytes(ibftExtra) + if err != nil { + return err + } + genesis.ExtraData = append(genesis.ExtraData, extraData...) + + // Write genesis to file + data, err := json.MarshalIndent(genesis, "", " ") + if err != nil { + return fmt.Errorf("failed to generate genesis: %w", err) + } + + //nolint:gosec + if err := os.WriteFile(c.GlobalString(outputFileFlag.Name), data, 0644); err != nil { + return fmt.Errorf("failed to write genesis: %w", err) + } + + return nil +} + +func main() { + log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + + if err := app.Run(os.Args); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} diff --git a/cmd/genesis-gen/utils.go b/cmd/genesis-gen/utils.go new file mode 100644 index 0000000000..c76a9d621b --- /dev/null +++ b/cmd/genesis-gen/utils.go @@ -0,0 +1,76 @@ +package main + +import ( + "fmt" + "math/big" + "strings" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" +) + +// getAddressMapping returns the key for the SC storage mapping (address => something) +// +// More information: +// https://docs.soliditylang.org/en/latest/internals/layout_in_storage.html +func getAddressMapping(address common.Address, slot int64) []byte { + bigSlot := big.NewInt(slot) + + finalSlice := append( + PadLeftOrTrim(address.Bytes(), 32), + PadLeftOrTrim(bigSlot.Bytes(), 32)..., + ) + keccakValue := crypto.Keccak256(finalSlice) + + return keccakValue +} + +// getIndexWithOffset is a helper method for adding an offset to the already found keccak hash +func getIndexWithOffset(keccakHash []byte, offset int64) []byte { + bigOffset := big.NewInt(offset) + bigKeccak := big.NewInt(0).SetBytes(keccakHash) + + bigKeccak.Add(bigKeccak, bigOffset) + + return bigKeccak.Bytes() +} + +// PadLeftOrTrim left-pads the passed in byte array to the specified size, +// or trims the array if it exceeds the passed in size +func PadLeftOrTrim(bb []byte, size int) []byte { + l := len(bb) + if l == size { + return bb + } + + if l > size { + return bb[l-size:] + } + + tmp := make([]byte, size) + copy(tmp[size-l:], bb) + + return tmp +} + +func ParseUint256orHex(val *string) (*big.Int, error) { + if val == nil { + return nil, nil + } + + str := *val + base := 10 + + if strings.HasPrefix(str, "0x") { + str = str[2:] + base = 16 + } + + b, ok := new(big.Int).SetString(str, base) + + if !ok { + return nil, fmt.Errorf("could not parse") + } + + return b, nil +} diff --git a/cmd/genesis-gen/validatorset.go b/cmd/genesis-gen/validatorset.go new file mode 100644 index 0000000000..109fec4c11 --- /dev/null +++ b/cmd/genesis-gen/validatorset.go @@ -0,0 +1,147 @@ +package main + +import ( + "errors" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/dccontracts" + "github.com/ethereum/go-ethereum/crypto" +) + +// getValidatorSetStorageIndexes is a helper function for getting the correct indexes +// of the storage slots which need to be modified during bootstrap. +// +// It is SC dependant, and based on the SC located at: +// https://github.com/dogechain-lab/dogechain-contracts +func getValidatorSetStorageIndexes(address common.Address, index int64) *validatorSetStorageIndexes { + storageIndexes := validatorSetStorageIndexes{} + + // Get the indexes for the mappings + // The index for the mapping is retrieved with: + // keccak(address . slot) + // . stands for concatenation (basically appending the bytes) + storageIndexes.AddressToIsValidatorIndex = getAddressMapping(address, vsAddressToIsValidatorSlot) + storageIndexes.AddressToStakedAmountIndex = getAddressMapping(address, vsAddressToStakedAmountSlot) + storageIndexes.AddressToValidatorIndexIndex = getAddressMapping(address, vsAddressToValidatorIndexSlot) + + // Get the indexes for _status, _owner, _validators, _stakedAmount, etc + // Index for regular types is calculated as just the regular slot + storageIndexes.StatusIndex = big.NewInt(vsStatusSlot).Bytes() + storageIndexes.OwnerIndex = big.NewInt(vsOwnerSlot).Bytes() + storageIndexes.ThresholdIndex = big.NewInt(vsThresholdSlot).Bytes() + storageIndexes.MinimumIndex = big.NewInt(vsMinimumSlot).Bytes() + storageIndexes.StakedAmountIndex = big.NewInt(vsStakedAmountSlot).Bytes() + + // Index for array types is calculated as keccak(slot) + index + // The slot for the dynamic arrays that's put in the keccak needs to be in hex form (padded 64 chars) + storageIndexes.ValidatorsIndex = getIndexWithOffset( + crypto.Keccak256(PadLeftOrTrim(big.NewInt(vsValidatorsSlot).Bytes(), 32)), + index, + ) + + // For any dynamic array in Solidity, the size of the actual array should be + // located on slot x + storageIndexes.ValidatorsArraySizeIndex = []byte{byte(vsValidatorsSlot)} + + return &storageIndexes +} + +// validatorSetStorageIndexes is a wrapper for different storage indexes that +// need to be modified +type validatorSetStorageIndexes struct { + StatusIndex []byte // uint256 + OwnerIndex []byte // address + ThresholdIndex []byte // uint256 + MinimumIndex []byte // uint256 + ValidatorsIndex []byte // []address + ValidatorsArraySizeIndex []byte // []address size + AddressToIsValidatorIndex []byte // mapping(address => bool) + AddressToStakedAmountIndex []byte // mapping(address => uint256) + AddressToValidatorIndexIndex []byte // mapping(address => uint256) + StakedAmountIndex []byte // uint256 +} + +// Slot definitions for SC storage +const ( + vsStatusSlot = int64(iota) // Slot 0 + vsOwnerSlot + vsThresholdSlot + vsMinimumSlot + vsValidatorsSlot + vsAddressToIsValidatorSlot + vsAddressToStakedAmountSlot + vsAddressToValidatorIndexSlot + vsStakedAmountSlot +) + +const ( + DefaultValidatorSetStakedBalance = "0x84595161401484A000000" // 10_000_000 DC + DefaultValidatorSetStatusNotEntered = 1 // ReentrancyGuard status contant +) + +// predeployValidatorSet is a helper method for setting up the ValidatorSet smart contract account, +// using the passed in validators as pre-staked validators +func predeployValidatorSet(owner common.Address, validators []common.Address) (*core.GenesisAccount, error) { + stakingAccount := &core.GenesisAccount{ + Code: dccontracts.DCValidatorSetContractByteCode, + } + if owner == (common.Address{}) { + return nil, errors.New("contract owner should not be empty") + } + + // Generate the empty account storage map + storageMap := make(map[common.Hash]common.Hash) + bigOne := big.NewInt(1) + bigTrueValue := big.NewInt(1) + stakedAmount := big.NewInt(0) + notEnteredStatus := big.NewInt(DefaultValidatorSetStatusNotEntered) + + for indx, validator := range validators { + // Get the storage indexes + storageIndexes := getValidatorSetStorageIndexes(validator, int64(indx)) + + // Set the value for the owner + storageMap[common.BytesToHash(storageIndexes.OwnerIndex)] = + common.BytesToHash(owner.Bytes()) + + // Set the value for the owner + storageMap[common.BytesToHash(storageIndexes.MinimumIndex)] = + common.BytesToHash(bigOne.Bytes()) + + // Set the value for the validators array + storageMap[common.BytesToHash(storageIndexes.ValidatorsIndex)] = + common.BytesToHash( + validator.Bytes(), + ) + + // Set the value for the address -> validator array index mapping + storageMap[common.BytesToHash(storageIndexes.AddressToIsValidatorIndex)] = + common.BytesToHash(bigTrueValue.Bytes()) + + // Set the value for the address -> validator index mapping + storageMap[common.BytesToHash(storageIndexes.AddressToValidatorIndexIndex)] = + common.BigToHash(new(big.Int).SetUint64(uint64(indx))) + + // Set the value for the total staked amount + storageMap[common.BytesToHash(storageIndexes.StakedAmountIndex)] = + common.BytesToHash(stakedAmount.Bytes()) + + // Set the value for the size of the validators array + storageMap[common.BytesToHash(storageIndexes.ValidatorsArraySizeIndex)] = + common.BigToHash(new(big.Int).SetUint64(uint64(indx + 1))) + + // Set the default status + storageMap[common.BytesToHash(storageIndexes.StatusIndex)] = + common.BytesToHash(notEnteredStatus.Bytes()) + } + + // Save the storage map + stakingAccount.Storage = storageMap + + // Set the Staking SC balance to numValidators * defaultStakedBalance + stakingAccount.Balance = stakedAmount + + return stakingAccount, nil +} diff --git a/cmd/genesis-gen/vault.go b/cmd/genesis-gen/vault.go new file mode 100644 index 0000000000..4f5075e95e --- /dev/null +++ b/cmd/genesis-gen/vault.go @@ -0,0 +1,55 @@ +package main + +import ( + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/dccontracts" +) + +// Slot definitions for SC storage +const ( + vaultOwnerSlot = int64(iota) // Slot 0 +) + +// StorageIndexes is a wrapper for different storage indexes that +// need to be modified +type vaultStorageIndexes struct { + OwnerIndex []byte // address +} + +// getStorageIndexes is a helper function for getting the correct indexes +// of the storage slots which need to be modified during bootstrap. +// +// It is SC dependant, and based on the SC located at: +// https://github.com/dogechain-lab/dogechain-contracts +func getVaultStorageIndexes() *vaultStorageIndexes { + storageIndexes := vaultStorageIndexes{} + + // Get the indexes for _owner, _minimumThreshold + // Index for regular types is calculated as just the regular slot + storageIndexes.OwnerIndex = big.NewInt(vaultOwnerSlot).Bytes() + + return &storageIndexes +} + +// predeployVaultSC is a helper method for setting up the vault smart contract account, +// using the passed in owner and signers as pre-defined accounts. +func predeployVaultSC(owner common.Address) *core.GenesisAccount { + contractAccount := &core.GenesisAccount{ + Code: dccontracts.DCValidatorSetContractByteCode, + } + + // Generate the empty account storage map + storageMap := make(map[common.Hash]common.Hash) + // Set the value for the owner + storageIndexes := getVaultStorageIndexes() + storageMap[common.BytesToHash(storageIndexes.OwnerIndex)] = + common.BytesToHash(owner.Bytes()) + + // Save the storage map + contractAccount.Storage = storageMap + + return contractAccount +} diff --git a/consensus/ibft/ibft.go b/consensus/ibft/ibft.go index 15f12e1566..5480ae8ff6 100644 --- a/consensus/ibft/ibft.go +++ b/consensus/ibft/ibft.go @@ -42,7 +42,7 @@ const ( checkpointInterval = 1024 // Number of blocks after which to save the snapshot to the database defaultEpochLength = uint64(100000) // Default number of blocks of checkpoint to update validatorSet from contract - extraVanity = 32 // Fixed number of extra-data prefix bytes reserved for signer vanity + ExtraVanity = 32 // Fixed number of extra-data prefix bytes reserved for signer vanity ) const ( @@ -438,7 +438,7 @@ func (p *IBFT) snapshot(chain consensus.ChainHeaderReader, number uint64, hash c // get checkpoint data hash := checkpoint.Hash() - if len(checkpoint.Extra) <= extraVanity { + if len(checkpoint.Extra) <= ExtraVanity { return nil, errors.New("invalid extra-data for genesis block, check the genesis.json file") } diff --git a/core/dccontracts/1001_validator_set.go b/core/dccontracts/1001_validator_set.go new file mode 100644 index 0000000000..5c79f9c72b --- /dev/null +++ b/core/dccontracts/1001_validator_set.go @@ -0,0 +1,12 @@ +// Code generated by codeembed. DO NOT EDIT. + +package dccontracts + +import ( + _ "embed" +) + +// ByteCodeSha256: 2a95cf8938e05ee303bbf2c5921f218a7ee227a1228a967322a1cd6688c6c362 +// BinaryByteCodeSha256: 72ed4149651787738b3c392342043381b5a4aa746d4b7fbf6af60289b474631b +//go:embed hex/1001_validator_set.hex +var DCValidatorSetContractByteCode []byte diff --git a/core/dccontracts/1001_validatorset_detroit.go b/core/dccontracts/1001_validatorset_detroit.go new file mode 100644 index 0000000000..656db63775 --- /dev/null +++ b/core/dccontracts/1001_validatorset_detroit.go @@ -0,0 +1,12 @@ +// Code generated by codeembed. DO NOT EDIT. + +package dccontracts + +import ( + _ "embed" +) + +// ByteCodeSha256: 392a5d3bb9f791025d580ac86fe39267241419e23e9c2beb1cab57f87570239e +// BinaryByteCodeSha256: db64ad788707480bfa98ddae12d9f2a008ca86ded7be942dcd549e217fb459f6 +//go:embed hex/1001_validatorset_detroit.hex +var DCValidatorSetContractDetroitByteCode []byte diff --git a/core/dccontracts/1002_bridge.go b/core/dccontracts/1002_bridge.go new file mode 100644 index 0000000000..11d898ed84 --- /dev/null +++ b/core/dccontracts/1002_bridge.go @@ -0,0 +1,12 @@ +// Code generated by codeembed. DO NOT EDIT. + +package dccontracts + +import ( + _ "embed" +) + +// ByteCodeSha256: adea481c3befc76f0c678b4c33b5046687667360865101426c77c5cf56220cd5 +// BinaryByteCodeSha256: 11467e94f0ce4b6ad37e2d784f24bfca3a27fd3dc256384ffdd0528215bd6fc5 +//go:embed hex/1002_bridge.hex +var DCBridgeContractByteCode []byte diff --git a/core/dccontracts/1002_bridge_detroit.go b/core/dccontracts/1002_bridge_detroit.go new file mode 100644 index 0000000000..a03eb9054a --- /dev/null +++ b/core/dccontracts/1002_bridge_detroit.go @@ -0,0 +1,12 @@ +// Code generated by codeembed. DO NOT EDIT. + +package dccontracts + +import ( + _ "embed" +) + +// ByteCodeSha256: 8d06029d8e6df0ac6d395d6f2eee6401bf6e5436daa8cf4afe6438843ab1aaa0 +// BinaryByteCodeSha256: 3a58020b71be6ca88afaea5af0eb4bf556ce5f1a666c50c629d288e66dca6ffb +//go:embed hex/1002_bridge_detroit.hex +var DCBridgeContractDetroitByteCode []byte diff --git a/core/dccontracts/1002_bridge_portland.go b/core/dccontracts/1002_bridge_portland.go new file mode 100644 index 0000000000..85c6bf68d2 --- /dev/null +++ b/core/dccontracts/1002_bridge_portland.go @@ -0,0 +1,12 @@ +// Code generated by codeembed. DO NOT EDIT. + +package dccontracts + +import ( + _ "embed" +) + +// ByteCodeSha256: 6e3a18857e791fca9e3d8334ecc4a048eb4d6e2990e5bf97d89cbe042b9b51d9 +// BinaryByteCodeSha256: fd4b22266fe26b81dfc4fb0064d6189c8531cbfeaae86d246b330b3498ef7918 +//go:embed hex/1002_bridge_portland.hex +var DCBridgeContractPortlandByteCode []byte diff --git a/core/dccontracts/1003_vault.go b/core/dccontracts/1003_vault.go new file mode 100644 index 0000000000..a2c516517a --- /dev/null +++ b/core/dccontracts/1003_vault.go @@ -0,0 +1,12 @@ +// Code generated by codeembed. DO NOT EDIT. + +package dccontracts + +import ( + _ "embed" +) + +// ByteCodeSha256: b9ac79012af2a83bd31a50710e53f82ce771892e79d68840adc1feb3cc103a0a +// BinaryByteCodeSha256: af607b86119d3699fb48c26cc4f83b1995a3fe3ed50f1dbeecd020e91d2c521a +//go:embed hex/1003_vault.hex +var DCVaultContractByteCode []byte diff --git a/core/dccontracts/bytecode/.gitignore b/core/dccontracts/bytecode/.gitignore new file mode 100644 index 0000000000..cfd0cc125b --- /dev/null +++ b/core/dccontracts/bytecode/.gitignore @@ -0,0 +1 @@ +hex/ \ No newline at end of file diff --git a/core/dccontracts/bytecode/1001-ValidatorSet-Detroit.bin b/core/dccontracts/bytecode/1001-ValidatorSet-Detroit.bin new file mode 100644 index 0000000000..c3f5e69b1e --- /dev/null +++ b/core/dccontracts/bytecode/1001-ValidatorSet-Detroit.bin @@ -0,0 +1 @@ +0x608060405234801561001057600080fd5b50600436106103f15760003560e01c80638aee812711610215578063c2a45d4d11610125578063e1a2e863116100b8578063f7c618c111610087578063f7c618c1146108d1578063f90ecacc146108e9578063facd743b146108fc578063fd9275db1461090f578063fda259e01461092257600080fd5b8063e1a2e86314610885578063e589b61e14610898578063ede5d558146108ab578063f2fde38b146108be57600080fd5b8063ced5bcc1116100f4578063ced5bcc114610841578063d0e30db014610849578063d431b1ac14610851578063d946d27a1461085957600080fd5b8063c2a45d4d1461080b578063c60453a81461081e578063c96be4cb14610826578063ca1e78191461083957600080fd5b8063aea0e78b116101a8578063b7ab4db511610177578063b7ab4db5146107c0578063bb872b4a146107d5578063be199738146107e8578063bebe9daf146107f0578063c0541aaa146107f857600080fd5b8063aea0e78b14610795578063aed1d4031461079d578063b46e5520146107a5578063b4e2fad6146107b857600080fd5b80639dbf97db116101e45780639dbf97db146106e9578063a2526bd3146106f1578063a310624f14610746578063ae2b3e831461078257600080fd5b80638aee8127146106925780638da5cb5b146106a557806395b5a5ee146106b657806396a602f3146106c957600080fd5b806349df8d33116103105780636eab12bd116102a3578063751bf20211610272578063751bf20214610648578063766718081461065b5780637a34e211146106635780637bc897de146106765780638043c10c1461068957600080fd5b80636eab12bd146105ee5780636f8568471461061a57806372d29f641461062257806373a3dda61461063557600080fd5b806359cdb14b116102df57806359cdb14b146105be5780635b9db75a146105c65780635c975abb146105d95780636cbe6cd8146105e657600080fd5b806349df8d331461054b5780634d99dd16146105535780634f558e7914610566578063500a15641461059957600080fd5b806325646e1f116103885780633c21ec87116103575780633c21ec87146104f45780633cd1ecf5146104fc57806340a141ff146105255780634878f4011461053857600080fd5b806325646e1f146104c957806332cc6f08146104dc578063346c90a8146104e4578063373d6132146104ec57600080fd5b8063179b4408116103c4578063179b4408146104705780631e83409a146104905780631fe97684146104a357806320146774146104b657600080fd5b8063026e402b146103f65780630397d4581461040b578063097475f71461041e5780630ca95cf11461044f575b600080fd5b610409610404366004613ab5565b610935565b005b610409610419366004613a19565b610c3d565b61043161042c366004613a19565b610cb9565b60405161044699989796959493929190613ca7565b60405180910390f35b61046261045d366004613a34565b610d99565b604051908152602001610446565b61046261047e366004613a19565b601c6020526000908152604090205481565b61040961049e366004613a19565b610dc6565b6104096104b1366004613a19565b6110fe565b6104096104c4366004613b8b565b611212565b6104096104d7366004613ba4565b611275565b600b54610462565b600c54610462565b600854610462565b6104096112e0565b61046261050a366004613a19565b6001600160a01b03166000908152601c602052604090205490565b610409610533366004613a19565b611426565b610409610546366004613b8b565b6116cc565b600a54610462565b610409610561366004613ab5565b61172f565b610589610574366004613b8b565b601d6020526000908152604090205460ff1681565b6040519015158152602001610446565b6009546001600160a01b03165b6040516001600160a01b039091168152602001610446565b601254610462565b6104096105d4366004613b8b565b611ab3565b6013546105899060ff1681565b600f54610462565b6104626105fc366004613a19565b6001600160a01b03166000908152601a602052604090206003015490565b601154610462565b610409610630366004613a67565b611b16565b610409610643366004613a19565b611bae565b610409610656366004613b8b565b611d16565b610462611d79565b610409610671366004613b8b565b611d95565b610462610684366004613a34565b611df8565b61046260145481565b6104096106a0366004613a19565b611fc5565b6001546001600160a01b03166105a6565b6104096106c4366004613a19565b612049565b6104626106d7366004613a19565b601e6020526000908152604090205481565b600d54610462565b61072b6106ff366004613a34565b601b60209081526000928352604080842090915290825290208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610446565b610775610754366004613a19565b6001600160a01b03166000908152601a602052604090206007015460ff1690565b6040516104469190613c86565b610409610790366004613b34565b61236f565b6104626125cd565b6104626125dc565b6104096107b3366004613a19565b612664565b600354610462565b6107c861271a565b6040516104469190613c39565b6104096107e3366004613b8b565b612726565b600e54610462565b610462612789565b610462610806366004613a19565b612795565b610409610819366004613b8b565b6127b6565b610462612819565b610409610834366004613a19565b612825565b6107c8612952565b601054610462565b610409612e93565b610409612fed565b610462610867366004613a19565b6001600160a01b03166000908152601a602052604090206004015490565b610409610893366004613b8b565b61302b565b6104096108a6366004613a19565b61308e565b6107c86108b9366004613adf565b613186565b6104096108cc366004613a19565b613271565b6013546105a69061010090046001600160a01b031681565b6105a66108f7366004613b8b565b613309565b61058961090a366004613a19565b613333565b61040961091d366004613b8b565b613340565b610409610930366004613a19565b6133a3565b32331461095d5760405162461bcd60e51b815260040161095490613d6f565b60405180910390fd5b600260005414156109805760405162461bcd60e51b815260040161095490613e0f565b600260005560135460ff16156109a85760405162461bcd60e51b815260040161095490613d45565b6012548110156109ca5760405162461bcd60e51b815260040161095490613dee565b6009546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015610a1c57600080fd5b505af1158015610a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a549190613b12565b506001600160a01b0382166000818152601b602090815260408083203384528252808320938352601a90915290206002600782015460ff166003811115610a9d57610a9d613f44565b14610aba5760405162461bcd60e51b815260040161095490613da6565b6000610af48360010154610aee64e8d4a51000610ae88660050154886000015461346f90919063ffffffff16565b90613482565b9061348e565b90508015610b865760135460405163a9059cbb60e01b8152336004820152602481018390526101009091046001600160a01b03169063a9059cbb90604401602060405180830381600087803b158015610b4c57600080fd5b505af1158015610b60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b849190613b12565b505b610b8e611d79565b60028401558254610b9f908561349a565b8084556005830154610bbc9164e8d4a5100091610ae8919061346f565b60018401556003820154610bd0908561349a565b6003830155600854610be2908561349a565b600855610bf08533866134a6565b6040518481526001600160a01b0386169033907fe5541a6b6103d4fa7e021ed54fad39c66f27a76bd13d374cf6240ae6bd0bb72b906020015b60405180910390a350506001600055505050565b6001546001600160a01b03163314610c675760405162461bcd60e51b815260040161095490613d0e565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f3792de2485bcc1adb436c37819f81339378f5ec98f5b3534f7b71b70b5d31c0390600090a35050565b601a60205260009081526040902080548190610cd490613ed8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0090613ed8565b8015610d4d5780601f10610d2257610100808354040283529160200191610d4d565b820191906000526020600020905b815481529060010190602001808311610d3057829003601f168201915b5050505060018301546002840154600385015460048601546005870154600688015460079098015496976001600160a01b03909516969395509193909260ff8082169161010090041689565b6001600160a01b038083166000908152601b60209081526040808320938516835292905220545b92915050565b323314610de55760405162461bcd60e51b815260040161095490613d6f565b60026000541415610e085760405162461bcd60e51b815260040161095490613e0f565b600260005560135460ff1615610e305760405162461bcd60e51b815260040161095490613d45565b6001600160a01b0381166000908152601b6020908152604080832033845290915290208054610e945760405162461bcd60e51b815260206004820152601060248201526f6e6f7468696e6720746f20636c61696d60801b6044820152606401610954565b6001600160a01b0382166000908152601a602052604080822081516101208101909252805482908290610ec690613ed8565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef290613ed8565b8015610f3f5780601f10610f1457610100808354040283529160200191610f3f565b820191906000526020600020905b815481529060010190602001808311610f2257829003601f168201915b505050918352505060018201546001600160a01b0316602082015260028201546040820152600380830154606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e09092019160ff1690811115610fab57610fab613f44565b6003811115610fbc57610fbc613f44565b815260079190910154610100900460ff161515602090910152600183015460a082015184549293506000926110019291610aee9164e8d4a5100091610ae8919061346f565b905080156110b35760a082015183546110249164e8d4a5100091610ae89161346f565b600184015560135460405163a9059cbb60e01b8152336004820152602481018390526101009091046001600160a01b03169063a9059cbb90604401602060405180830381600087803b15801561107957600080fd5b505af115801561108d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b19190613b12565b505b6040518181526001600160a01b0385169033907ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839060200160405180910390a3505060016000555050565b6001546001600160a01b031633146111285760405162461bcd60e51b815260040161095490613d0e565b6001600160a01b0381166000908152601a6020526040902060035461114b6125dc565b116111685760405162461bcd60e51b815260040161095490613e46565b6002600782015460ff16600381111561118357611183613f44565b146111a05760405162461bcd60e51b815260040161095490613da6565b6007810180546001919060ff191682805b021790555060078101546001600160a01b038316907f0c5c3450e67dce49a08116ce351f3a67c5b7d3217c607162d91189a7229174ea9060ff1660038111156111fc576111fc613f44565b6040519081526020015b60405180910390a25050565b6001546001600160a01b0316331461123c5760405162461bcd60e51b815260040161095490613d0e565b600b805490829055604051829082907f3d657b82c31a672b7a8765b72f6f5e966cfb980ed039570a39ccdd70bf19c26690600090a35050565b6001546001600160a01b0316331461129f5760405162461bcd60e51b815260040161095490613d0e565b6010805463ffffffff83169182905560405190919082907f7414a33d82c698855ef5ed249e10e2f7481971f83f98cee8d7023f15ae0e881f90600090a35050565b6001546001600160a01b0316331461130a5760405162461bcd60e51b815260040161095490613d0e565b60005b6004548110156114175760006004828154811061132c5761132c613f70565b60009182526020808320909101546001600160a01b0316808352601a9091526040822090925090600782015460ff16600381111561136c5761136c613f44565b1415611402576001810180546001600160a01b0384166001600160a01b031990911617905560078101805460ff191660021790556113a9826134fc565b5060078101546001600160a01b038316907f0c5c3450e67dce49a08116ce351f3a67c5b7d3217c607162d91189a7229174ea9060ff1660038111156113f0576113f0613f44565b60405190815260200160405180910390a25b5050808061140f90613f13565b91505061130d565b506114246004600061387f565b565b6001546001600160a01b031633146114505760405162461bcd60e51b815260040161095490613d0e565b6001600160a01b0381166000908152601a60205260408082208151610120810190925280548290829061148290613ed8565b80601f01602080910402602001604051908101604052809291908181526020018280546114ae90613ed8565b80156114fb5780601f106114d0576101008083540402835291602001916114fb565b820191906000526020600020905b8154815290600101906020018083116114de57829003601f168201915b505050918352505060018201546001600160a01b0316602082015260028201546040820152600380830154606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e09092019160ff169081111561156757611567613f44565b600381111561157857611578613f44565b815260079190910154610100900460ff161515602090910152905060008160e0015160038111156115ab576115ab613f44565b14156115e55760405162461bcd60e51b81526020600482015260096024820152681b9bdd08199bdd5b9960ba1b6044820152606401610954565b6060810151156116245760405162461bcd60e51b815260206004820152600a6024820152691a185cc81cdd185ad95960b21b6044820152606401610954565b61162d82613509565b506001600160a01b0382166000908152601a6020526040812090611651828261389d565b506001810180546001600160a01b0319169055600060028201819055600382018190556004820181905560058201819055600682018190556007909101805461ffff191690556040516001600160a01b038416917fe1434e25d6611e0db941968fdc97811c982ac1602e951637d206f5fdda9dd8f191a25050565b6001546001600160a01b031633146116f65760405162461bcd60e51b815260040161095490613d0e565b600e805490829055604051829082907fb64c2fee5d0035d3aa1122935a0d2800f151a0853dd89adbabb795a6190f8be090600090a35050565b32331461174e5760405162461bcd60e51b815260040161095490613d6f565b600260005414156117715760405162461bcd60e51b815260040161095490613e0f565b600260005560135460ff16156117995760405162461bcd60e51b815260040161095490613d45565b6001600160a01b0382166000908152601b602090815260408083203384529091529020805482118015906117cd5750600082115b61180e5760405162461bcd60e51b81526020600482015260126024820152716e6f7468696e6720746f20756e7374616b6560701b6044820152606401610954565b611816611d79565b61182d826002015461182760105490565b9061349a565b1061186c5760405162461bcd60e51b815260206004820152600f60248201526e65706f6368206e6f7420616c6c6f7760881b6044820152606401610954565b6001600160a01b038084166000908152601a6020526040902060018101549091163314156118ce5760405162461bcd60e51b815260206004820152600f60248201526e6f776e6572206e6f7420616c6c6f7760881b6044820152606401610954565b60006118fc8360010154610aee64e8d4a51000610ae88660050154886000015461346f90919063ffffffff16565b9050801561198e5760135460405163a9059cbb60e01b8152336004820152602481018390526101009091046001600160a01b03169063a9059cbb90604401602060405180830381600087803b15801561195457600080fd5b505af1158015611968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198c9190613b12565b505b825461199a908561348e565b80845560058301546119b79164e8d4a5100091610ae8919061346f565b600184015560038201546119cb908561348e565b60038301556008546119dd908561348e565b6008556119eb853386613516565b60095460405163a9059cbb60e01b8152336004820152602481018690526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015611a3757600080fd5b505af1158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f9190613b12565b5060408051858152602081018390526001600160a01b0387169133917f3aace7340547de7b9156593a7652dc07ee900cea3fd8f82cb6c9d38b408298029101610c29565b6001546001600160a01b03163314611add5760405162461bcd60e51b815260040161095490613d0e565b6012805490829055604051829082907fc18cde4032061961886377a68e664be72416785473fa678fa416ed2a31c1b10f90600090a35050565b6001600160a01b038281166000908152601a6020526040902060018101549091163314611b555760405162461bcd60e51b815260040161095490613dca565b8151611b6790829060208501906138d7565b50826001600160a01b03167f8a0ff04a1f70e76c640c0520aa1550c775b38ce28af05fdaee467ad160d05fb183604051611ba19190613c94565b60405180910390a2505050565b323314611bcd5760405162461bcd60e51b815260040161095490613d6f565b60135460ff1615611bf05760405162461bcd60e51b815260040161095490613d45565b6000611bfa611d79565b6001600160a01b0383166000908152601a602052604090209091506003600782015460ff166003811115611c3057611c30613f44565b14611c4d5760405162461bcd60e51b815260040161095490613da6565b60018101546001600160a01b03163314611c795760405162461bcd60e51b815260040161095490613dca565b80600201548211611cbc5760405162461bcd60e51b815260206004820152600d60248201526c1cdd1a5b1b081a5b881a985a5b609a1b6044820152606401610954565b60078101805460ff19166002908117909155600060068301819055908201556040518281526001600160a01b038416907f198b4f09d57ab5dbbf891a135940a04087b2544bebf3506cc81e1b64063b6d6590602001611ba1565b6001546001600160a01b03163314611d405760405162461bcd60e51b815260040161095490613d0e565b600f805490829055604051829082907fdf736d7e2a17c66d20e9bd8c8b51ee5d59a97733dde732893d13fee45469f99b90600090a35050565b6000611d90600c544361348290919063ffffffff16565b905090565b6001546001600160a01b03163314611dbf5760405162461bcd60e51b815260040161095490613d0e565b6003805490829055604051829082907fd1d3d2f30aaedd8fa08451e0514e0d6cd5b86a0e19d7d769d0c2a24495beeb0890600090a35050565b6001600160a01b038083166000908152601b6020908152604080832093851683529281528282208351606081018552815480825260018301549382019390935260029091015493810193909352909190611e56576000915050610dc0565b6001600160a01b0384166000908152601a602052604080822081516101208101909252805482908290611e8890613ed8565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb490613ed8565b8015611f015780601f10611ed657610100808354040283529160200191611f01565b820191906000526020600020905b815481529060010190602001808311611ee457829003601f168201915b505050918352505060018201546001600160a01b0316602082015260028201546040820152600380830154606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e09092019160ff1690811115611f6d57611f6d613f44565b6003811115611f7e57611f7e613f44565b815260079190910154610100900460ff16151560209182015283015160a08201518451929350611fbc92610aee9164e8d4a5100091610ae89161346f565b95945050505050565b6001546001600160a01b03163314611fef5760405162461bcd60e51b815260040161095490613d0e565b601380546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907fab27a2419bd7a3bc605bff66b38aacb84061d9e20edab7f7680ce52e6fcd925690600090a35050565b3233146120685760405162461bcd60e51b815260040161095490613d6f565b6002600054141561208b5760405162461bcd60e51b815260040161095490613e0f565b600260005560135460ff16156120b35760405162461bcd60e51b815260040161095490613d45565b6001600160a01b038181166000908152601a60205260409020600181015490911633146120f25760405162461bcd60e51b815260040161095490613dca565b6001600160a01b0382166000908152601b60209081526040808320338452909152902080546121585760405162461bcd60e51b81526020600482015260126024820152716e6f7468696e6720746f20756e7374616b6560701b6044820152606401610954565b6003546121636125dc565b116121805760405162461bcd60e51b815260040161095490613e46565b8054600182015460058401546000916121a991610aee9064e8d4a5100090610ae890879061346f565b9050801561223b5760135460405163a9059cbb60e01b8152336004820152602481018390526101009091046001600160a01b03169063a9059cbb90604401602060405180830381600087803b15801561220157600080fd5b505af1158015612215573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122399190613b12565b505b6001600160a01b0385166000908152601b6020908152604080832033845290915281208181556001810182905560020155600384015461227b908361348e565b600385015560078401805460ff1916600117905560085461229c908361348e565b6008556122aa853384613516565b60095460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b1580156122f657600080fd5b505af115801561230a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232e9190613b12565b506040516001600160a01b038616907fe1434e25d6611e0db941968fdc97811c982ac1602e951637d206f5fdda9dd8f190600090a250506001600055505050565b32331461238e5760405162461bcd60e51b815260040161095490613d6f565b600260005414156123b15760405162461bcd60e51b815260040161095490613e0f565b600260005560135460ff16156123d95760405162461bcd60e51b815260040161095490613d45565b6011548110156123fb5760405162461bcd60e51b815260040161095490613dee565b6009546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561244d57600080fd5b505af1158015612461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124859190613b12565b506001600160a01b0382166000908152601a6020526040812090600782015460ff1660038111156124b8576124b8613f44565b146124f55760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48195e1a5cdd609a1b6044820152606401610954565b6001600160a01b0383166000908152601b6020908152604080832033845282529091208551909161252a9184918801906138d7565b50600180830180546001600160a01b0319163317905560078301805460ff19168280021790555060038201839055612560611d79565b6002820155828155600854612575908461349a565b600855612581846134fc565b5061258d8433856134a6565b6040516001600160a01b038516907fe366c1c0452ed8eec96861e9e54141ebff23c9ec89fe27b996b45f5ec388498790600090a250506001600055505050565b6000611d906001611827611d79565b6000806125e7612789565b90506000805b8281101561265d57600061260260158361359c565b905060026001600160a01b0382166000908152601a602052604090206007015460ff16600381111561263657612636613f44565b141561264a578261264681613f13565b9350505b508061265581613f13565b9150506125ed565b5092915050565b6001546001600160a01b0316331461268e5760405162461bcd60e51b815260040161095490613d0e565b6001600160a01b0381166000908152601a60205260409020601154816003015410156126cc5760405162461bcd60e51b815260040161095490613dee565b6001600782015460ff1660038111156126e7576126e7613f44565b146127045760405162461bcd60e51b815260040161095490613da6565b6007810180546002919060ff19166001836111b1565b6060611d9060156135a8565b6001546001600160a01b031633146127505760405162461bcd60e51b815260040161095490613d0e565b600a805490829055604051829082907f79a5349732f93288abbb68e251c3dfc325bf3ee6fde7786d919155d39733e0f590600090a35050565b6000611d9060156135b5565b6001600160a01b0381166000908152601960205260408120610dc0906135b5565b6001546001600160a01b031633146127e05760405162461bcd60e51b815260040161095490613d0e565b600d805490829055604051829082907fad65adbcfea0d9e94f88fee2e0422a61d519dc522506374972587aefe7194bd490600090a35050565b6000611d9060176135b5565b4133146128745760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920636f696e626173652063616e2063616c6c2066756e6374696f6e006044820152606401610954565b336000908152601e602052604090205461288f90600161349a565b336000908152601e60209081526040808320939093556001600160a01b0384168252601a9052206002600782015460ff1660038111156128d1576128d1613f44565b141561294e5760006128e1611d79565b905060006128fd6001846006015461349a90919063ffffffff16565b6006840181905560408051828152602081018590529192506001600160a01b038616917f83b04ecf7330997e742429a641e136d9f3698c3e9ac9cb9ce0cc2d6da36a244d910160405180910390a250505b5050565b600454606090156129bd5760048054806020026020016040519081016040528092919081815260200182805480156129b357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612995575b5050505050905090565b60006129c7612789565b905060008167ffffffffffffffff8111156129e4576129e4613f86565b604051908082528060200260200182016040528015612a0d578160200160208202803683370190505b5090506000805b83811015612aaf576000612a2960158361359c565b905060026001600160a01b0382166000908152601a602052604090206007015460ff166003811115612a5d57612a5d613f44565b1415612a9c5780848481518110612a7657612a76613f70565b6001600160a01b039092166020928302919091019091015282612a9881613f13565b9350505b5080612aa781613f13565b915050612a14565b506000612abb600b5490565b905081811115612acc575080612e8a565b60005b81811015612e885760008190506000601a6000878481518110612af457612af4613f70565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060405180610120016040529081600082018054612b3890613ed8565b80601f0160208091040260200160405190810160405280929190818152602001828054612b6490613ed8565b8015612bb15780601f10612b8657610100808354040283529160200191612bb1565b820191906000526020600020905b815481529060010190602001808311612b9457829003601f168201915b505050918352505060018201546001600160a01b0316602082015260028201546040820152600380830154606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e09092019160ff1690811115612c1d57612c1d613f44565b6003811115612c2e57612c2e613f44565b815260079190910154610100900460ff16151560209091015290506000612c56846001613e68565b90505b85811015612df9576000601a6000898481518110612c7957612c79613f70565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060405180610120016040529081600082018054612cbd90613ed8565b80601f0160208091040260200160405190810160405280929190818152602001828054612ce990613ed8565b8015612d365780601f10612d0b57610100808354040283529160200191612d36565b820191906000526020600020905b815481529060010190602001808311612d1957829003601f168201915b505050918352505060018201546001600160a01b0316602082015260028201546040820152600380830154606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e09092019160ff1690811115612da257612da2613f44565b6003811115612db357612db3613f44565b815260079190910154610100900460ff161515602090910152606081810151908501519192501115612de6578193508092505b5080612df181613f13565b915050612c59565b50858281518110612e0c57612e0c613f70565b6020026020010151868481518110612e2657612e26613f70565b6020026020010151878581518110612e4057612e40613f70565b60200260200101888581518110612e5957612e59613f70565b6001600160a01b0393841660209182029290920101529116905250819050612e8081613f13565b915050612acf565b505b82525092915050565b413314612ee25760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920636f696e626173652063616e2063616c6c2066756e6374696f6e006044820152606401610954565b336000908152601a602052604090206002600782015460ff166003811115612f0c57612f0c613f44565b148015612f1d575060008160030154115b8015612f395750436000908152601d602052604090205460ff16155b15612fea57436000908152601d60205260409020805460ff19166001179055600a54601454612f679161349a565b6014556003810154600a54600091612f8891610ae89064e8d4a5100061346f565b6005830154909150612f9a908261349a565b6005830155600a546004830154612fb09161349a565b6004830155600a5460405190815233907f62bf3b2d86d93be4bb7aa06117c0e1719716f019f3265fdef4df36510ae5070a90602001611206565b50565b6001546001600160a01b031633146130175760405162461bcd60e51b815260040161095490613d0e565b6013805460ff19811660ff90911615179055565b6001546001600160a01b031633146130555760405162461bcd60e51b815260040161095490613d0e565b6011805490829055604051829082907f207082661d623a88e041ad2d52c2d4ddc719880c70c3ab44aa81accff9bd86ed90600090a35050565b6001546001600160a01b031633146130b85760405162461bcd60e51b815260040161095490613d0e565b6001600160a01b0381166000908152601a60205260409020600e54816006015410156130f65760405162461bcd60e51b815260040161095490613dee565b6003546131016125dc565b1161311e5760405162461bcd60e51b815260040161095490613e46565b6000613128611d79565b905061313781611827600f5490565b600283015560078201805460ff191660031790556040518181526001600160a01b038416907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e9582580290602001611ba1565b606060008267ffffffffffffffff8111156131a3576131a3613f86565b6040519080825280602002602001820160405280156131cc578160200160208202803683370190505b50905060006131da86612795565b90506000855b6131ea8688613e68565b8110156132655782811015613253576001600160a01b038816600090815260196020526040902061321b908261359c565b84838151811061322d5761322d613f70565b6001600160a01b03909216602092830291909101909101528161324f81613f13565b9250505b8061325d81613f13565b9150506131e0565b50825250949350505050565b6001546001600160a01b0316331461329b5760405162461bcd60e51b815260040161095490613d0e565b6001600160a01b0381166133005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610954565b612fea816135bf565b6004818154811061331957600080fd5b6000918252602090912001546001600160a01b0316905081565b6000610dc0601583613611565b6001546001600160a01b0316331461336a5760405162461bcd60e51b815260040161095490613d0e565b600c805490829055604051829082907f62d532a388a6e5e7ad8089a8aff169a6045b666b20a5a11070805ffc8ed16ee190600090a35050565b6001546001600160a01b031633146133cd5760405162461bcd60e51b815260040161095490613d0e565b6001600160a01b0381166000908152601a602052604090206003600782015460ff16600381111561340057613400613f44565b1461341d5760405162461bcd60e51b815260040161095490613da6565b60078101805460ff19166002908117909155600060068301819055908201556001600160a01b0382167f198b4f09d57ab5dbbf891a135940a04087b2544bebf3506cc81e1b64063b6d656111fc611d79565b600061347b8284613ea2565b9392505050565b600061347b8284613e80565b600061347b8284613ec1565b600061347b8284613e68565b6001600160a01b0382166000908152601c60205260409020546134c9908261349a565b6001600160a01b0383166000908152601c60205260409020556134eb82613633565b506134f68383613640565b50505050565b6000610dc060158361365e565b6000610dc0601583613673565b6001600160a01b0382166000908152601c6020526040902054613539908261348e565b6001600160a01b0383166000908152601c602052604090208190556135635761356182613688565b505b6001600160a01b038084166000908152601b6020908152604080832093861683529290522054613597576134f68383613695565b505050565b600061347b83836136b7565b6060600061347b836136e1565b6000610dc0825490565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0381166000908152600183016020526040812054151561347b565b6000610dc060178361365e565b6001600160a01b038216600090815260196020526040812061347b90835b600061347b836001600160a01b03841661373d565b600061347b836001600160a01b03841661378c565b6000610dc0601783613673565b6001600160a01b038216600090815260196020526040812061347b9083613673565b60008260000182815481106136ce576136ce613f70565b9060005260206000200154905092915050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561373157602002820191906000526020600020905b81548152602001906001019080831161371d575b50505050509050919050565b600081815260018301602052604081205461378457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610dc0565b506000610dc0565b600081815260018301602052604081205480156138755760006137b0600183613ec1565b85549091506000906137c490600190613ec1565b90508181146138295760008660000182815481106137e4576137e4613f70565b906000526020600020015490508087600001848154811061380757613807613f70565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061383a5761383a613f5a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610dc0565b6000915050610dc0565b5080546000825590600052602060002090810190612fea919061395b565b5080546138a990613ed8565b6000825580601f106138b9575050565b601f016020900490600052602060002090810190612fea919061395b565b8280546138e390613ed8565b90600052602060002090601f016020900481019282613905576000855561394b565b82601f1061391e57805160ff191683800117855561394b565b8280016001018555821561394b579182015b8281111561394b578251825591602001919060010190613930565b5061395792915061395b565b5090565b5b80821115613957576000815560010161395c565b80356001600160a01b038116811461398757600080fd5b919050565b600082601f83011261399d57600080fd5b813567ffffffffffffffff808211156139b8576139b8613f86565b604051601f8301601f19908116603f011681019082821181831017156139e0576139e0613f86565b816040528381528660208588010111156139f957600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215613a2b57600080fd5b61347b82613970565b60008060408385031215613a4757600080fd5b613a5083613970565b9150613a5e60208401613970565b90509250929050565b60008060408385031215613a7a57600080fd5b613a8383613970565b9150602083013567ffffffffffffffff811115613a9f57600080fd5b613aab8582860161398c565b9150509250929050565b60008060408385031215613ac857600080fd5b613ad183613970565b946020939093013593505050565b600080600060608486031215613af457600080fd5b613afd84613970565b95602085013595506040909401359392505050565b600060208284031215613b2457600080fd5b8151801515811461347b57600080fd5b600080600060608486031215613b4957600080fd5b833567ffffffffffffffff811115613b6057600080fd5b613b6c8682870161398c565b935050613b7b60208501613970565b9150604084013590509250925092565b600060208284031215613b9d57600080fd5b5035919050565b600060208284031215613bb657600080fd5b813563ffffffff8116811461347b57600080fd5b60048110613be857634e487b7160e01b600052602160045260246000fd5b9052565b6000815180845260005b81811015613c1257602081850181015186830182015201613bf6565b81811115613c24576000602083870101525b50601f01601f19169290920160200192915050565b6020808252825182820181905260009190848201906040850190845b81811015613c7a5783516001600160a01b031683529284019291840191600101613c55565b50909695505050505050565b60208101610dc08284613bca565b60208152600061347b6020830184613bec565b6000610120808352613cbb8184018d613bec565b91505060018060a01b038a1660208301528860408301528760608301528660808301528560a08301528460c0830152613cf760e0830185613bca565b8215156101008301529a9950505050505050505050565b6020808252601c908201527f4f6e6c79206f776e65722063616e2063616c6c2066756e6374696f6e00000000604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601a908201527f4f6e6c7920454f412063616e2063616c6c2066756e6374696f6e000000000000604082015260600190565b6020808252600a90820152696261642073746174757360b01b604082015260600190565b6020808252600a908201526937b7363c9037bbb732b960b11b604082015260600190565b602080825260079082015266746f6f206c6f7760c81b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260089082015267746f6f206c65737360c01b604082015260600190565b60008219821115613e7b57613e7b613f2e565b500190565b600082613e9d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613ebc57613ebc613f2e565b500290565b600082821015613ed357613ed3613f2e565b500390565b600181811c90821680613eec57607f821691505b60208210811415613f0d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613f2757613f27613f2e565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212208a6a273edf434835fe48e693769fb5d82273f3735a620955d164cd3c4ff7b53364736f6c63430008060033 \ No newline at end of file diff --git a/core/dccontracts/bytecode/1001-ValidatorSet.bin b/core/dccontracts/bytecode/1001-ValidatorSet.bin new file mode 100644 index 0000000000..153f4b5664 --- /dev/null +++ b/core/dccontracts/bytecode/1001-ValidatorSet.bin @@ -0,0 +1 @@ +0x608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063ca1e781911610071578063ca1e781914610281578063d0a5e6ce1461029f578063f2fde38b146102bb578063f90ecacc146102d7578063facd743b1461030757610116565b80638da5cb5b1461020f578063960bfe041461022d5780639cbfc76514610249578063a694fc3a1461026557610116565b8063373d6132116100e9578063373d61321461018f57806342cde4e8146101ad5780634d238c8e146101cb57806352d6804d146101e7578063715018a61461020557610116565b80630c340a241461011b5780632367f6b5146101395780632def6620146101695780633209e9e614610173575b600080fd5b610123610337565b6040516101309190611b59565b60405180910390f35b610153600480360381019061014e919061189f565b610361565b6040516101609190611d71565b60405180910390f35b6101716103aa565b005b61018d600480360381019061018891906118f9565b6106f1565b005b6101976107d8565b6040516101a49190611d71565b60405180910390f35b6101b56107e2565b6040516101c29190611d71565b60405180910390f35b6101e560048036038101906101e0919061189f565b6107ec565b005b6101ef610aee565b6040516101fc9190611d71565b60405180910390f35b61020d610af8565b005b610217610b94565b6040516102249190611b59565b60405180910390f35b610247600480360381019061024291906118f9565b610bbe565b005b610263600480360381019061025e919061189f565b610ca5565b005b61027f600480360381019061027a91906118f9565b610e70565b005b610289611120565b6040516102969190611bd4565b60405180910390f35b6102b960048036038101906102b4919061189f565b6111ae565b005b6102d560048036038101906102d0919061189f565b61131b565b005b6102f160048036038101906102ec91906118f9565b611427565b6040516102fe9190611b59565b60405180910390f35b610321600480360381019061031c919061189f565b611466565b60405161032e9190611bf6565b60405180910390f35b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040f90611cd1565b60405180910390fd5b6002600054141561045e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045590611d51565b60405180910390fd5b60026000819055506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081116104ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e490611c51565b60405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610547816008546114bc90919063ffffffff16565b600881905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016105aa929190611bab565b602060405180830381600087803b1580156105c457600080fd5b505af11580156105d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fc91906118cc565b50600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156106a25760035460048054905011610698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068f90611cf1565b60405180910390fd5b6106a1336114d2565b5b803373ffffffffffffffffffffffffffffffffffffffff167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f7560405160405180910390a3506001600081905550565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077890611c91565b60405180910390fd5b600060035490508160038190555081813373ffffffffffffffffffffffffffffffffffffffff167f6eb5ec46450e0c6e94bb67a32e6bca9ec9ff819009505cbc6b886caf512d37bc60405160405180910390a45050565b6000600854905090565b6000600254905090565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461087c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087390611c91565b60405180910390fd5b600254600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f790611d31565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098490611d11565b60405180910390fd5b600480549050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8064a302796c89446a96d63470b5b036212da26bd2debe5bec73e0170a9a5e8360405160405180910390a350565b6000600354905090565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f90611c91565b60405180910390fd5b610b926000611784565b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4590611c91565b60405180910390fd5b600060025490508160028190555081813373ffffffffffffffffffffffffffffffffffffffff167fed4e7b6d1951b75b13e101295f8473d6492319d89608bbfbfdbc643d96246f7d60405160405180910390a45050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2c90611c91565b60405180910390fd5b60035460048054905011610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7590611cf1565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0190611c71565b60405180910390fd5b610e13816114d2565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4edebfc5ffaa4271f94ab363e643701124f2b4381b7a4f614dbdf75f166dc0cb60405160405180910390a350565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590611cd1565b60405180910390fd5b60026000541415610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b90611d51565b60405180910390fd5b600260008190555060008111610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6690611c31565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610fce93929190611b74565b602060405180830381600087803b158015610fe857600080fd5b505af1158015610ffc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102091906118cc565b5061107381600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461184a90919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110cb8160085461184a90919063ffffffff16565b600881905550803373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d60405160405180910390a3600160008190555050565b606060048054806020026020016040519081016040528092919081815260200182805480156111a457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161115a575b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123590611c91565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f48a312d70029e6dd97980e9e051e1ff0b8b8be967450af46ce6dc5fa9830428f60405160405180910390a45050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a290611c91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561141b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141290611c11565b60405180910390fd5b61142481611784565b50565b6004818154811061143757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600081836114ca9190611e2c565b905092915050565b600480549050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90611cb1565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006115b760016004805490506114bc90919063ffffffff16565b90508082146116a6576000600482815481106115d6576115d5611f06565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050806004848154811061161857611617611f06565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055600480548061174a57611749611ed7565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836118589190611dd6565b905092915050565b60008135905061186f8161216f565b92915050565b60008151905061188481612186565b92915050565b6000813590506118998161219d565b92915050565b6000602082840312156118b5576118b4611f35565b5b60006118c384828501611860565b91505092915050565b6000602082840312156118e2576118e1611f35565b5b60006118f084828501611875565b91505092915050565b60006020828403121561190f5761190e611f35565b5b600061191d8482850161188a565b91505092915050565b6000611932838361193e565b60208301905092915050565b61194781611e60565b82525050565b61195681611e60565b82525050565b600061196782611d9c565b6119718185611db4565b935061197c83611d8c565b8060005b838110156119ad5781516119948882611926565b975061199f83611da7565b925050600181019050611980565b5085935050505092915050565b6119c381611e72565b82525050565b60006119d6602683611dc5565b91506119e182611f3a565b604082019050919050565b60006119f9600e83611dc5565b9150611a0482611f89565b602082019050919050565b6000611a1c601d83611dc5565b9150611a2782611fb2565b602082019050919050565b6000611a3f601983611dc5565b9150611a4a82611fdb565b602082019050919050565b6000611a62601c83611dc5565b9150611a6d82612004565b602082019050919050565b6000611a85601283611dc5565b9150611a908261202d565b602082019050919050565b6000611aa8601a83611dc5565b9150611ab382612056565b602082019050919050565b6000611acb602583611dc5565b9150611ad68261207f565b604082019050919050565b6000611aee602583611dc5565b9150611af9826120ce565b604082019050919050565b6000611b11601d83611dc5565b9150611b1c8261211d565b602082019050919050565b6000611b34601f83611dc5565b9150611b3f82612146565b602082019050919050565b611b5381611e9e565b82525050565b6000602082019050611b6e600083018461194d565b92915050565b6000606082019050611b89600083018661194d565b611b96602083018561194d565b611ba36040830184611b4a565b949350505050565b6000604082019050611bc0600083018561194d565b611bcd6020830184611b4a565b9392505050565b60006020820190508181036000830152611bee818461195c565b905092915050565b6000602082019050611c0b60008301846119ba565b92915050565b60006020820190508181036000830152611c2a816119c9565b9050919050565b60006020820190508181036000830152611c4a816119ec565b9050919050565b60006020820190508181036000830152611c6a81611a0f565b9050919050565b60006020820190508181036000830152611c8a81611a32565b9050919050565b60006020820190508181036000830152611caa81611a55565b9050919050565b60006020820190508181036000830152611cca81611a78565b9050919050565b60006020820190508181036000830152611cea81611a9b565b9050919050565b60006020820190508181036000830152611d0a81611abe565b9050919050565b60006020820190508181036000830152611d2a81611ae1565b9050919050565b60006020820190508181036000830152611d4a81611b04565b9050919050565b60006020820190508181036000830152611d6a81611b27565b9050919050565b6000602082019050611d866000830184611b4a565b92915050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611de182611e9e565b9150611dec83611e9e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611e2157611e20611ea8565b5b828201905092915050565b6000611e3782611e9e565b9150611e4283611e9e565b925082821015611e5557611e54611ea8565b5b828203905092915050565b6000611e6b82611e7e565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f4f6e6c79207374616b65722063616e2063616c6c2066756e6374696f6e000000600082015250565b7f4163636f756e74206d7573742062652076616c696461746f7200000000000000600082015250565b7f4f6e6c79206f776e65722063616e2063616c6c2066756e6374696f6e00000000600082015250565b7f696e646578206f7574206f662072616e67650000000000000000000000000000600082015250565b7f4f6e6c7920454f412063616e2063616c6c2066756e6374696f6e000000000000600082015250565b7f56616c696461746f72732063616e2774206265206c657373207468616e206d6960008201527f6e696d756d000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e742063616e6e6f7420616c726561647920626520612076616c6960008201527f6461746f72000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e74206d757374206265207374616b656420656e6f756768000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61217881611e60565b811461218357600080fd5b50565b61218f81611e72565b811461219a57600080fd5b50565b6121a681611e9e565b81146121b157600080fd5b5056fea26469706673582212207b4f1a27bec5e8a044f17b8b4069e66cb9e4d2ad6ef3d1654e32ea80cff42c5d64736f6c63430008060033 \ No newline at end of file diff --git a/core/dccontracts/bytecode/1002-Bridge-Detroit.bin b/core/dccontracts/bytecode/1002-Bridge-Detroit.bin new file mode 100644 index 0000000000..911a0eeb1c --- /dev/null +++ b/core/dccontracts/bytecode/1002-Bridge-Detroit.bin @@ -0,0 +1 @@ +0x60806040526004361061012a5760003560e01c806367058d29116100ab5780639dc29fac1161006f5780639dc29fac14610314578063cd86a6cb14610334578063d431b1ac14610354578063de242ff414610369578063eb12d61e1461037f578063f2fde38b1461039f57600080fd5b806367058d291461025c578063715018a61461027c5780637df73e27146102915780638da5cb5b146102ca57806394cf795e146102f257600080fd5b806331fb67c2116100f257806331fb67c2146101ca57806334fcf437146101dd5780634cde3a53146101fd57806354c4633e146102125780635c975abb1461023257600080fd5b806310bad4cf1461012f57806311e330b21461015157806318160ddd1461017157806319e5c034146101955780632c4e722e146101b5575b600080fd5b34801561013b57600080fd5b5061014f61014a366004611084565b6103bf565b005b34801561015d57600080fd5b5061014f61016c366004611084565b610405565b34801561017d57600080fd5b506006545b6040519081526020015b60405180910390f35b3480156101a157600080fd5b5061014f6101b0366004610fc9565b61043c565b3480156101c157600080fd5b50600754610182565b61014f6101d8366004611047565b6106da565b3480156101e957600080fd5b5061014f6101f8366004611084565b6107bf565b34801561020957600080fd5b50600154610182565b34801561021e57600080fd5b5061014f61022d366004610f84565b610824565b34801561023e57600080fd5b5060085461024c9060ff1681565b604051901515815260200161018c565b34801561026857600080fd5b5061014f610277366004611084565b6108b2565b34801561028857600080fd5b5061014f610917565b34801561029d57600080fd5b5061024c6102ac366004610f84565b6001600160a01b031660009081526003602052604090205460ff1690565b3480156102d657600080fd5b506000546040516001600160a01b03909116815260200161018c565b3480156102fe57600080fd5b5061030761094d565b60405161018c9190611192565b34801561032057600080fd5b5061014f61032f366004610f9f565b6109af565b34801561034057600080fd5b5061030761034f366004610fc9565b610a46565b34801561036057600080fd5b5061014f610ae2565b34801561037557600080fd5b5061018260095481565b34801561038b57600080fd5b5061014f61039a366004610f84565b610b20565b3480156103ab57600080fd5b5061014f6103ba366004610f84565b610c0d565b6000546001600160a01b031633146103f25760405162461bcd60e51b81526004016103e990611240565b60405180910390fd5b6009546103ff9082610ca5565b60095550565b6000546001600160a01b0316331461042f5760405162461bcd60e51b81526004016103e990611240565b6009546103ff9082610cb8565b3360009081526003602052604090205460ff1661049b5760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c79207369676e65722063616e2063616c6c2066756e6374696f6e00000060448201526064016103e9565b60085460ff16156104be5760405162461bcd60e51b81526004016103e990611277565b8260095410156105095760405162461bcd60e51b8152602060048201526016602482015275696e73756666696369656e7420616c6c6f77616e636560501b60448201526064016103e9565b600084848484604051602001610522949392919061113d565b60408051808303601f190181529181528151602092830120600081815260059093529120600481015491925090600160a01b900460ff16156105655750506106d4565b60005b81548110156105bc5781543390839083908110610587576105876113bf565b6000918252602090912001546001600160a01b031614156105aa575050506106d4565b806105b481611378565b915050610568565b506004810180546001600160a01b0319166001600160a01b0388161790556001810185905582516105f69060038301906020860190610e42565b50835161060c9060028301906020870190610e42565b5080546001810182556000828152602090200180546001600160a01b031916331790556002805461063d91906112b9565b815411156106d15760048101805460ff60a01b1916600160a01b1790556006546106679086610cb8565b6006556009546106779086610ca5565b600955600181015460048201546040516001600160a01b03909116907fbceab28ca952a9177ce3716580d6c8c2d677fdf721b944e57a5e7322622ffdc9906106c89060028601906003870190611212565b60405180910390a35b50505b50505050565b60085460ff16156106fd5760405162461bcd60e51b81526004016103e990611277565b6001543410156107385760405162461bcd60e51b8152602060048201526006602482015265119bdc989a5960d21b60448201526064016103e9565b600061075b61271061075560075434610cc490919063ffffffff16565b90610cd0565b905060006107693483610ca5565b6006549091506107799082610ca5565b6006556040518290829033907f62116a798bb58cc967874bea4d771de2f9aeec6c64189ff2e5a551072f3106f9906107b29088906111df565b60405180910390a4505050565b6000546001600160a01b031633146107e95760405162461bcd60e51b81526004016103e990611240565b60078054908290556040518290829033907f9e31cca092b9e764bfc6b1b552d55ad4b035e609318fecc26cd38b34e8dd08bb90600090a45050565b6000546001600160a01b0316331461084e5760405162461bcd60e51b81526004016103e990611240565b6001600160a01b03811660009081526003602052604090205460ff16156108af5761087881610cdc565b6040516001600160a01b0382169033907f013d6b862b532c38b01efed34c94d382085143963c63c76e87c24d4b7a37f98e90600090a35b50565b6000546001600160a01b031633146108dc5760405162461bcd60e51b81526004016103e990611240565b60018054908290556040518290829033907f480e8e496f7aff74972b0902e678fd5b564e4fb6527f0418da8a2c1aa628002290600090a45050565b6000546001600160a01b031633146109415760405162461bcd60e51b81526004016103e990611240565b61094b6000610df2565b565b606060028054806020026020016040519081016040528092919081815260200182805480156109a557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610987575b5050505050905090565b6000546001600160a01b031633146109d95760405162461bcd60e51b81526004016103e990611240565b60085460ff16156109fc5760405162461bcd60e51b81526004016103e990611277565b600654610a099082610ca5565b60065560405181906001600160a01b038416907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df790600090a35050565b6060600085858585604051602001610a61949392919061113d565b60408051601f1981840301815282825280516020918201206000818152600583528390208054808402860184019094528385529094509190830182828015610ad257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ab4575b5050505050915050949350505050565b6000546001600160a01b03163314610b0c5760405162461bcd60e51b81526004016103e990611240565b6008805460ff19811660ff90911615179055565b6000546001600160a01b03163314610b4a5760405162461bcd60e51b81526004016103e990611240565b6001600160a01b03811660009081526003602052604090205460ff166108af57600280546001600160a01b03831660008181526004602090815260408083209490945560039052828120805460ff19166001908117909155845490810185559381527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90930180546001600160a01b031916821790559051909133917f8064a302796c89446a96d63470b5b036212da26bd2debe5bec73e0170a9a5e839190a350565b6000546001600160a01b03163314610c375760405162461bcd60e51b81526004016103e990611240565b6001600160a01b038116610c9c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103e9565b6108af81610df2565b6000610cb182846112fa565b9392505050565b6000610cb182846112a1565b6000610cb182846112db565b6000610cb182846112b9565b6001600160a01b038116600090815260046020526040812054600254909190610d07906001906112fa565b9050808214610d8f57600060028281548110610d2557610d256113bf565b600091825260209091200154600280546001600160a01b039092169250829185908110610d5457610d546113bf565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559290911681526004909152604090208290555b6001600160a01b0383166000908152600360209081526040808320805460ff1916905560049091528120556002805480610dcb57610dcb6113a9565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610e4e9061133d565b90600052602060002090601f016020900481019282610e705760008555610eb6565b82601f10610e8957805160ff1916838001178555610eb6565b82800160010185558215610eb6579182015b82811115610eb6578251825591602001919060010190610e9b565b50610ec2929150610ec6565b5090565b5b80821115610ec25760008155600101610ec7565b80356001600160a01b0381168114610ef257600080fd5b919050565b600082601f830112610f0857600080fd5b813567ffffffffffffffff80821115610f2357610f236113d5565b604051601f8301601f19908116603f01168101908282118183101715610f4b57610f4b6113d5565b81604052838152866020858801011115610f6457600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215610f9657600080fd5b610cb182610edb565b60008060408385031215610fb257600080fd5b610fbb83610edb565b946020939093013593505050565b60008060008060808587031215610fdf57600080fd5b610fe885610edb565b935060208501359250604085013567ffffffffffffffff8082111561100c57600080fd5b61101888838901610ef7565b9350606087013591508082111561102e57600080fd5b5061103b87828801610ef7565b91505092959194509250565b60006020828403121561105957600080fd5b813567ffffffffffffffff81111561107057600080fd5b61107c84828501610ef7565b949350505050565b60006020828403121561109657600080fd5b5035919050565b8054600090600181811c90808316806110b757607f831692505b60208084108214156110d957634e487b7160e01b600052602260045260246000fd5b838852602088018280156110f4576001811461110557611130565b60ff19871682528282019750611130565b60008981526020902060005b8781101561112a57815484820152908601908401611111565b83019850505b5050505050505092915050565b6bffffffffffffffffffffffff198560601b1681528360148201526000835161116d816034850160208801611311565b835190830190611184816034840160208801611311565b016034019695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156111d35783516001600160a01b0316835292840192918401916001016111ae565b50909695505050505050565b60208152600082518060208401526111fe816040850160208701611311565b601f01601f19169190910160400192915050565b604081526000611225604083018561109d565b8281036020840152611237818561109d565b95945050505050565b6020808252601c908201527f4f6e6c79206f776e65722063616e2063616c6c2066756e6374696f6e00000000604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b600082198211156112b4576112b4611393565b500190565b6000826112d657634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156112f5576112f5611393565b500290565b60008282101561130c5761130c611393565b500390565b60005b8381101561132c578181015183820152602001611314565b838111156106d45750506000910152565b600181811c9082168061135157607f821691505b6020821081141561137257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561138c5761138c611393565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212205b244481ec6aff2fd1940022fe1ab54dff4f36d72c704cbd60ef2cf781da910964736f6c63430008060033 \ No newline at end of file diff --git a/core/dccontracts/bytecode/1002-Bridge-Portland.bin b/core/dccontracts/bytecode/1002-Bridge-Portland.bin new file mode 100644 index 0000000000..186f8cc3c7 --- /dev/null +++ b/core/dccontracts/bytecode/1002-Bridge-Portland.bin @@ -0,0 +1 @@ +0x6080604052600436106101085760003560e01c8063715018a6116100955780639dc29fac116100645780639dc29fac14610321578063cd86a6cb1461034a578063d91921ed14610387578063eb12d61e146103b0578063f2fde38b146103d957610108565b8063715018a6146102775780637df73e271461028e5780638da5cb5b146102cb57806394cf795e146102f657610108565b806331fb67c2116100dc57806331fb67c2146101b557806334fcf437146101d15780634cde3a53146101fa57806354c4633e1461022557806367058d291461024e57610108565b8062a8efc71461010d57806318160ddd1461013657806319e5c034146101615780632c4e722e1461018a575b600080fd5b34801561011957600080fd5b50610134600480360381019061012f919061198e565b610402565b005b34801561014257600080fd5b5061014b6104ae565b6040516101589190611d88565b60405180910390f35b34801561016d57600080fd5b50610188600480360381019061018391906118a6565b6104b8565b005b34801561019657600080fd5b5061019f61082a565b6040516101ac9190611d88565b60405180910390f35b6101cf60048036038101906101ca9190611945565b610834565b005b3480156101dd57600080fd5b506101f860048036038101906101f3919061198e565b61092d565b005b34801561020657600080fd5b5061020f610a12565b60405161021c9190611d88565b60405180910390f35b34801561023157600080fd5b5061024c60048036038101906102479190611839565b610a1c565b005b34801561025a57600080fd5b506102756004803603810190610270919061198e565b610b63565b005b34801561028357600080fd5b5061028c610c48565b005b34801561029a57600080fd5b506102b560048036038101906102b09190611839565b610ce2565b6040516102c29190611c94565b60405180910390f35b3480156102d757600080fd5b506102e0610d38565b6040516102ed9190611c57565b60405180910390f35b34801561030257600080fd5b5061030b610d61565b6040516103189190611c72565b60405180910390f35b34801561032d57600080fd5b5061034860048036038101906103439190611866565b610def565b005b34801561035657600080fd5b50610371600480360381019061036c91906118a6565b610ee0565b60405161037e9190611c72565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a9919061198e565b610fb9565b005b3480156103bc57600080fd5b506103d760048036038101906103d29190611839565b611065565b005b3480156103e557600080fd5b5061040060048036038101906103fb9190611839565b6112a6565b005b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048790611d28565b60405180910390fd5b6104a5816006546113b090919063ffffffff16565b60068190555050565b6000600654905090565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053b90611d68565b60405180910390fd5b60008484848460405160200161055d9493929190611c11565b60405160208183030381529060405280519060200120905060006005600083815260200190815260200160002090508060040160149054906101000a900460ff16156105aa575050610824565b60005b816000018054905081101561064b573373ffffffffffffffffffffffffffffffffffffffff168260000182815481106105e9576105e86121a3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561063857505050610824565b808061064390612070565b9150506105ad565b50858160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848160010181905550828160030190805190602001906106b09291906116fc565b50838160020190805190602001906106c99291906116fc565b5080600001339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600280805490506107409190611ec4565b816000018054905011801561076457508060040160149054906101000a900460ff16155b156108215760018160040160146101000a81548160ff02191690831515021790555061079b856006546113c690919063ffffffff16565b60068190555080600101548160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fbceab28ca952a9177ce3716580d6c8c2d677fdf721b944e57a5e7322622ffdc98360020184600301604051610818929190611cd1565b60405180910390a35b50505b50505050565b6000600754905090565b600154341015610879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087090611d48565b60405180910390fd5b60006108a4612710610896600754346113dc90919063ffffffff16565b6113f290919063ffffffff16565b905060006108bb82346113b090919063ffffffff16565b90506108d2816006546113b090919063ffffffff16565b60068190555081813373ffffffffffffffffffffffffffffffffffffffff167f62116a798bb58cc967874bea4d771de2f9aeec6c64189ff2e5a551072f3106f9866040516109209190611caf565b60405180910390a4505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b290611d28565b60405180910390fd5b600060075490508160078190555081813373ffffffffffffffffffffffffffffffffffffffff167f9e31cca092b9e764bfc6b1b552d55ad4b035e609318fecc26cd38b34e8dd08bb60405160405180910390a45050565b6000600154905090565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa190611d28565b60405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b6057610b0581611408565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f013d6b862b532c38b01efed34c94d382085143963c63c76e87c24d4b7a37f98e60405160405180910390a35b50565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be890611d28565b60405180910390fd5b600060015490508160018190555081813373ffffffffffffffffffffffffffffffffffffffff167f480e8e496f7aff74972b0902e678fd5b564e4fb6527f0418da8a2c1aa628002260405160405180910390a45050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd90611d28565b60405180910390fd5b610ce06000611638565b565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805480602002602001604051908101604052809291908181526020018280548015610de557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610d9b575b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490611d28565b60405180910390fd5b610e92816006546113b090919063ffffffff16565b600681905550808273ffffffffffffffffffffffffffffffffffffffff167f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df760405160405180910390a35050565b6060600085858585604051602001610efb9493929190611c11565b60405160208183030381529060405280519060200120905060056000828152602001908152602001600020600001805480602002602001604051908101604052809291908181526020018280548015610fa957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f5f575b5050505050915050949350505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e90611d28565b60405180910390fd5b61105c816006546113c690919063ffffffff16565b60068190555050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90611d28565b60405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112a357600280549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506002819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8064a302796c89446a96d63470b5b036212da26bd2debe5bec73e0170a9a5e8360405160405180910390a35b50565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90611d28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b90611d08565b60405180910390fd5b6113ad81611638565b50565b600081836113be9190611f4f565b905092915050565b600081836113d49190611e6e565b905092915050565b600081836113ea9190611ef5565b905092915050565b600081836114009190611ec4565b905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060016002805490506114609190611f4f565b905080821461154f5760006002828154811061147f5761147e6121a3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080600284815481106114c1576114c06121a3565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060028054806115fe576115fd612174565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546117089061200d565b90600052602060002090601f01602090048101928261172a5760008555611771565b82601f1061174357805160ff1916838001178555611771565b82800160010185558215611771579182015b82811115611770578251825591602001919060010190611755565b5b50905061177e9190611782565b5090565b5b8082111561179b576000816000905550600101611783565b5090565b60006117b26117ad84611dc8565b611da3565b9050828152602081018484840111156117ce576117cd612206565b5b6117d9848285611fcb565b509392505050565b6000813590506117f0816122fd565b92915050565b600082601f83011261180b5761180a612201565b5b813561181b84826020860161179f565b91505092915050565b60008135905061183381612314565b92915050565b60006020828403121561184f5761184e612210565b5b600061185d848285016117e1565b91505092915050565b6000806040838503121561187d5761187c612210565b5b600061188b858286016117e1565b925050602061189c85828601611824565b9150509250929050565b600080600080608085870312156118c0576118bf612210565b5b60006118ce878288016117e1565b94505060206118df87828801611824565b935050604085013567ffffffffffffffff811115611900576118ff61220b565b5b61190c878288016117f6565b925050606085013567ffffffffffffffff81111561192d5761192c61220b565b5b611939878288016117f6565b91505092959194509250565b60006020828403121561195b5761195a612210565b5b600082013567ffffffffffffffff8111156119795761197861220b565b5b611985848285016117f6565b91505092915050565b6000602082840312156119a4576119a3612210565b5b60006119b284828501611824565b91505092915050565b60006119c783836119d3565b60208301905092915050565b6119dc81611f83565b82525050565b6119eb81611f83565b82525050565b611a026119fd82611f83565b6120b9565b82525050565b6000611a1382611e1e565b611a1d8185611e41565b9350611a2883611df9565b8060005b83811015611a59578151611a4088826119bb565b9750611a4b83611e34565b925050600181019050611a2c565b5085935050505092915050565b611a6f81611f95565b82525050565b6000611a8082611e29565b611a8a8185611e52565b9350611a9a818560208601611fda565b611aa381612215565b840191505092915050565b6000611ab982611e29565b611ac38185611e63565b9350611ad3818560208601611fda565b80840191505092915050565b60008154611aec8161200d565b611af68186611e52565b94506001821660008114611b115760018114611b2357611b56565b60ff1983168652602086019350611b56565b611b2c85611e09565b60005b83811015611b4e57815481890152600182019150602081019050611b2f565b808801955050505b50505092915050565b6000611b6c602683611e52565b9150611b7782612233565b604082019050919050565b6000611b8f601c83611e52565b9150611b9a82612282565b602082019050919050565b6000611bb2600683611e52565b9150611bbd826122ab565b602082019050919050565b6000611bd5601d83611e52565b9150611be0826122d4565b602082019050919050565b611bf481611fc1565b82525050565b611c0b611c0682611fc1565b6120dd565b82525050565b6000611c1d82876119f1565b601482019150611c2d8286611bfa565b602082019150611c3d8285611aae565b9150611c498284611aae565b915081905095945050505050565b6000602082019050611c6c60008301846119e2565b92915050565b60006020820190508181036000830152611c8c8184611a08565b905092915050565b6000602082019050611ca96000830184611a66565b92915050565b60006020820190508181036000830152611cc98184611a75565b905092915050565b60006040820190508181036000830152611ceb8185611adf565b90508181036020830152611cff8184611adf565b90509392505050565b60006020820190508181036000830152611d2181611b5f565b9050919050565b60006020820190508181036000830152611d4181611b82565b9050919050565b60006020820190508181036000830152611d6181611ba5565b9050919050565b60006020820190508181036000830152611d8181611bc8565b9050919050565b6000602082019050611d9d6000830184611beb565b92915050565b6000611dad611dbe565b9050611db9828261203f565b919050565b6000604051905090565b600067ffffffffffffffff821115611de357611de26121d2565b5b611dec82612215565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000611e7982611fc1565b9150611e8483611fc1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611eb957611eb86120e7565b5b828201905092915050565b6000611ecf82611fc1565b9150611eda83611fc1565b925082611eea57611ee9612116565b5b828204905092915050565b6000611f0082611fc1565b9150611f0b83611fc1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611f4457611f436120e7565b5b828202905092915050565b6000611f5a82611fc1565b9150611f6583611fc1565b925082821015611f7857611f776120e7565b5b828203905092915050565b6000611f8e82611fa1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611ff8578082015181840152602081019050611fdd565b83811115612007576000848401525b50505050565b6000600282049050600182168061202557607f821691505b6020821081141561203957612038612145565b5b50919050565b61204882612215565b810181811067ffffffffffffffff82111715612067576120666121d2565b5b80604052505050565b600061207b82611fc1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156120ae576120ad6120e7565b5b600182019050919050565b60006120c4826120cb565b9050919050565b60006120d682612226565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f776e65722063616e2063616c6c2066756e6374696f6e00000000600082015250565b7f466f726269640000000000000000000000000000000000000000000000000000600082015250565b7f4f6e6c79207369676e65722063616e2063616c6c2066756e6374696f6e000000600082015250565b61230681611f83565b811461231157600080fd5b50565b61231d81611fc1565b811461232857600080fd5b5056fea26469706673582212208879968f26c5ad21d7e3b58081ca73de324deb7256e1760798788f290bffec8364736f6c63430008060033 \ No newline at end of file diff --git a/core/dccontracts/bytecode/1002-Bridge.bin b/core/dccontracts/bytecode/1002-Bridge.bin new file mode 100644 index 0000000000..4c7c93a62d --- /dev/null +++ b/core/dccontracts/bytecode/1002-Bridge.bin @@ -0,0 +1 @@ +0x6080604052600436106100e85760003560e01c806367058d291161008a57806394cf795e1161005957806394cf795e146102ad578063cd86a6cb146102d8578063eb12d61e14610315578063f2fde38b1461033e576100e8565b806367058d2914610205578063715018a61461022e5780637df73e27146102455780638da5cb5b14610282576100e8565b806331fb67c2116100c657806331fb67c21461016c57806334fcf437146101885780634cde3a53146101b157806354c4633e146101dc576100e8565b806318160ddd146100ed57806319e5c034146101185780632c4e722e14610141575b600080fd5b3480156100f957600080fd5b50610102610367565b60405161010f9190611a64565b60405180910390f35b34801561012457600080fd5b5061013f600480360381019061013a9190611582565b610371565b005b34801561014d57600080fd5b506101566106e3565b6040516101639190611a64565b60405180910390f35b61018660048036038101906101819190611621565b6106ed565b005b34801561019457600080fd5b506101af60048036038101906101aa919061166a565b6107e6565b005b3480156101bd57600080fd5b506101c66108cb565b6040516101d39190611a64565b60405180910390f35b3480156101e857600080fd5b5061020360048036038101906101fe9190611555565b6108d5565b005b34801561021157600080fd5b5061022c6004803603810190610227919061166a565b610a1c565b005b34801561023a57600080fd5b50610243610b01565b005b34801561025157600080fd5b5061026c60048036038101906102679190611555565b610b9b565b6040516102799190611970565b60405180910390f35b34801561028e57600080fd5b50610297610bf1565b6040516102a49190611933565b60405180910390f35b3480156102b957600080fd5b506102c2610c1a565b6040516102cf919061194e565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa9190611582565b610ca8565b60405161030c919061194e565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190611555565b610d81565b005b34801561034a57600080fd5b5061036560048036038101906103609190611555565b610fc2565b005b6000600654905090565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166103fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f490611a44565b60405180910390fd5b60008484848460405160200161041694939291906118ed565b60405160208183030381529060405280519060200120905060006005600083815260200190815260200160002090508060040160149054906101000a900460ff16156104635750506106dd565b60005b8160000180549050811015610504573373ffffffffffffffffffffffffffffffffffffffff168260000182815481106104a2576104a1611e7f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156104f1575050506106dd565b80806104fc90611d4c565b915050610466565b50858160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084816001018190555082816003019080519060200190610569929190611418565b5083816002019080519060200190610582929190611418565b5080600001339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600280805490506105f99190611ba0565b816000018054905011801561061d57508060040160149054906101000a900460ff16155b156106da5760018160040160146101000a81548160ff021916908315150217905550610654856006546110cc90919063ffffffff16565b60068190555080600101548160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fbceab28ca952a9177ce3716580d6c8c2d677fdf721b944e57a5e7322622ffdc983600201846003016040516106d19291906119ad565b60405180910390a35b50505b50505050565b6000600754905090565b600154341015610732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072990611a24565b60405180910390fd5b600061075d61271061074f600754346110e290919063ffffffff16565b6110f890919063ffffffff16565b90506000610774823461110e90919063ffffffff16565b905061078b8160065461110e90919063ffffffff16565b60068190555081813373ffffffffffffffffffffffffffffffffffffffff167f62116a798bb58cc967874bea4d771de2f9aeec6c64189ff2e5a551072f3106f9866040516107d9919061198b565b60405180910390a4505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086b90611a04565b60405180910390fd5b600060075490508160078190555081813373ffffffffffffffffffffffffffffffffffffffff167f9e31cca092b9e764bfc6b1b552d55ad4b035e609318fecc26cd38b34e8dd08bb60405160405180910390a45050565b6000600154905090565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a90611a04565b60405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a19576109be81611124565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f013d6b862b532c38b01efed34c94d382085143963c63c76e87c24d4b7a37f98e60405160405180910390a35b50565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa190611a04565b60405180910390fd5b600060015490508160018190555081813373ffffffffffffffffffffffffffffffffffffffff167f480e8e496f7aff74972b0902e678fd5b564e4fb6527f0418da8a2c1aa628002260405160405180910390a45050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8690611a04565b60405180910390fd5b610b996000611354565b565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805480602002602001604051908101604052809291908181526020018280548015610c9e57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610c54575b5050505050905090565b6060600085858585604051602001610cc394939291906118ed565b60405160208183030381529060405280519060200120905060056000828152602001908152602001600020600001805480602002602001604051908101604052809291908181526020018280548015610d7157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610d27575b5050505050915050949350505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0690611a04565b60405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610fbf57600280549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506002819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8064a302796c89446a96d63470b5b036212da26bd2debe5bec73e0170a9a5e8360405160405180910390a35b50565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104790611a04565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b7906119e4565b60405180910390fd5b6110c981611354565b50565b600081836110da9190611b4a565b905092915050565b600081836110f09190611bd1565b905092915050565b600081836111069190611ba0565b905092915050565b6000818361111c9190611c2b565b905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160028054905061117c9190611c2b565b905080821461126b5760006002828154811061119b5761119a611e7f565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080600284815481106111dd576111dc611e7f565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600280548061131a57611319611e50565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805461142490611ce9565b90600052602060002090601f016020900481019282611446576000855561148d565b82601f1061145f57805160ff191683800117855561148d565b8280016001018555821561148d579182015b8281111561148c578251825591602001919060010190611471565b5b50905061149a919061149e565b5090565b5b808211156114b757600081600090555060010161149f565b5090565b60006114ce6114c984611aa4565b611a7f565b9050828152602081018484840111156114ea576114e9611ee2565b5b6114f5848285611ca7565b509392505050565b60008135905061150c81611fd9565b92915050565b600082601f83011261152757611526611edd565b5b81356115378482602086016114bb565b91505092915050565b60008135905061154f81611ff0565b92915050565b60006020828403121561156b5761156a611eec565b5b6000611579848285016114fd565b91505092915050565b6000806000806080858703121561159c5761159b611eec565b5b60006115aa878288016114fd565b94505060206115bb87828801611540565b935050604085013567ffffffffffffffff8111156115dc576115db611ee7565b5b6115e887828801611512565b925050606085013567ffffffffffffffff81111561160957611608611ee7565b5b61161587828801611512565b91505092959194509250565b60006020828403121561163757611636611eec565b5b600082013567ffffffffffffffff81111561165557611654611ee7565b5b61166184828501611512565b91505092915050565b6000602082840312156116805761167f611eec565b5b600061168e84828501611540565b91505092915050565b60006116a383836116af565b60208301905092915050565b6116b881611c5f565b82525050565b6116c781611c5f565b82525050565b6116de6116d982611c5f565b611d95565b82525050565b60006116ef82611afa565b6116f98185611b1d565b935061170483611ad5565b8060005b8381101561173557815161171c8882611697565b975061172783611b10565b925050600181019050611708565b5085935050505092915050565b61174b81611c71565b82525050565b600061175c82611b05565b6117668185611b2e565b9350611776818560208601611cb6565b61177f81611ef1565b840191505092915050565b600061179582611b05565b61179f8185611b3f565b93506117af818560208601611cb6565b80840191505092915050565b600081546117c881611ce9565b6117d28186611b2e565b945060018216600081146117ed57600181146117ff57611832565b60ff1983168652602086019350611832565b61180885611ae5565b60005b8381101561182a5781548189015260018201915060208101905061180b565b808801955050505b50505092915050565b6000611848602683611b2e565b915061185382611f0f565b604082019050919050565b600061186b601c83611b2e565b915061187682611f5e565b602082019050919050565b600061188e600683611b2e565b915061189982611f87565b602082019050919050565b60006118b1601d83611b2e565b91506118bc82611fb0565b602082019050919050565b6118d081611c9d565b82525050565b6118e76118e282611c9d565b611db9565b82525050565b60006118f982876116cd565b60148201915061190982866118d6565b602082019150611919828561178a565b9150611925828461178a565b915081905095945050505050565b600060208201905061194860008301846116be565b92915050565b6000602082019050818103600083015261196881846116e4565b905092915050565b60006020820190506119856000830184611742565b92915050565b600060208201905081810360008301526119a58184611751565b905092915050565b600060408201905081810360008301526119c781856117bb565b905081810360208301526119db81846117bb565b90509392505050565b600060208201905081810360008301526119fd8161183b565b9050919050565b60006020820190508181036000830152611a1d8161185e565b9050919050565b60006020820190508181036000830152611a3d81611881565b9050919050565b60006020820190508181036000830152611a5d816118a4565b9050919050565b6000602082019050611a7960008301846118c7565b92915050565b6000611a89611a9a565b9050611a958282611d1b565b919050565b6000604051905090565b600067ffffffffffffffff821115611abf57611abe611eae565b5b611ac882611ef1565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000611b5582611c9d565b9150611b6083611c9d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611b9557611b94611dc3565b5b828201905092915050565b6000611bab82611c9d565b9150611bb683611c9d565b925082611bc657611bc5611df2565b5b828204905092915050565b6000611bdc82611c9d565b9150611be783611c9d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c2057611c1f611dc3565b5b828202905092915050565b6000611c3682611c9d565b9150611c4183611c9d565b925082821015611c5457611c53611dc3565b5b828203905092915050565b6000611c6a82611c7d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611cd4578082015181840152602081019050611cb9565b83811115611ce3576000848401525b50505050565b60006002820490506001821680611d0157607f821691505b60208210811415611d1557611d14611e21565b5b50919050565b611d2482611ef1565b810181811067ffffffffffffffff82111715611d4357611d42611eae565b5b80604052505050565b6000611d5782611c9d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611d8a57611d89611dc3565b5b600182019050919050565b6000611da082611da7565b9050919050565b6000611db282611f02565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f776e65722063616e2063616c6c2066756e6374696f6e00000000600082015250565b7f466f726269640000000000000000000000000000000000000000000000000000600082015250565b7f4f6e6c79207369676e65722063616e2063616c6c2066756e6374696f6e000000600082015250565b611fe281611c5f565b8114611fed57600080fd5b50565b611ff981611c9d565b811461200457600080fd5b5056fea26469706673582212206b7ababa5b93722be5ea0352e4899dafd2597066314cb6a068dd167339659e2a64736f6c63430008060033 \ No newline at end of file diff --git a/core/dccontracts/bytecode/1003-Vault.bin b/core/dccontracts/bytecode/1003-Vault.bin new file mode 100644 index 0000000000..d0b8debc16 --- /dev/null +++ b/core/dccontracts/bytecode/1003-Vault.bin @@ -0,0 +1 @@ +0x60806040526004361061004e5760003560e01c8063715018a6146100a85780638da5cb5b146100bf5780639a99b4f0146100ea578063b69ef8a814610113578063f2fde38b1461013e576100a3565b366100a35760003411156100a157343373ffffffffffffffffffffffffffffffffffffffff167fabb45784a606c765b6d9ac6af3095cec6afbb3cb1eff23606f934e71ee41257e60405160405180910390a35b005b600080fd5b3480156100b457600080fd5b506100bd610167565b005b3480156100cb57600080fd5b506100d4610201565b6040516100e1919061064b565b60405180910390f35b3480156100f657600080fd5b50610111600480360381019061010c91906105a7565b61022a565b005b34801561011f57600080fd5b50610128610365565b60405161013591906106a6565b60405180910390f35b34801561014a57600080fd5b506101656004803603810190610160919061057a565b61036d565b005b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146101f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ec90610686565b60405180910390fd5b6101ff6000610477565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146102b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102af90610686565b60405180910390fd5b60004782106102c757476102c9565b815b90506000811115610360578273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561031a573d6000803e3d6000fd5b50808373ffffffffffffffffffffffffffffffffffffffff167fa641bcd8a48e29cb86bb641e1ad9cb6642ccd0227d91ec198044193b7f8416b760405160405180910390a35b505050565b600047905090565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146103fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f290610686565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561046b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046290610666565b60405180910390fd5b61047481610477565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008135905061054a8161079d565b92915050565b60008135905061055f816107b4565b92915050565b600081359050610574816107cb565b92915050565b6000602082840312156105905761058f610720565b5b600061059e8482850161053b565b91505092915050565b600080604083850312156105be576105bd610720565b5b60006105cc85828601610550565b92505060206105dd85828601610565565b9150509250929050565b6105f0816106d2565b82525050565b60006106036026836106c1565b915061060e82610725565b604082019050919050565b6000610626601c836106c1565b915061063182610774565b602082019050919050565b61064581610716565b82525050565b600060208201905061066060008301846105e7565b92915050565b6000602082019050818103600083015261067f816105f6565b9050919050565b6000602082019050818103600083015261069f81610619565b9050919050565b60006020820190506106bb600083018461063c565b92915050565b600082825260208201905092915050565b60006106dd826106f6565b9050919050565b60006106ef826106f6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f776e65722063616e2063616c6c2066756e6374696f6e00000000600082015250565b6107a6816106d2565b81146107b157600080fd5b50565b6107bd816106e4565b81146107c857600080fd5b50565b6107d481610716565b81146107df57600080fd5b5056fea2646970667358221220ee29b82c851f03b6b83f978461fd91d6f911bb6ac2c0984e121fdc0539e18d0864736f6c63430008060033 \ No newline at end of file diff --git a/core/dccontracts/codeembed/main.go b/core/dccontracts/codeembed/main.go new file mode 100644 index 0000000000..6bfa430a88 --- /dev/null +++ b/core/dccontracts/codeembed/main.go @@ -0,0 +1,88 @@ +package main + +import ( + "bytes" + "crypto/sha256" + "encoding/hex" + "flag" + "fmt" + "os" + "path/filepath" + "strings" + + "github.com/ethereum/go-ethereum/common" +) + +func main() { + var ( + input = flag.String("input", "", "input file") + outfile = flag.String("output", "", "output file") + name = flag.String("name", "", "name of the contract") + ) + flag.Parse() + + if info, err := os.Stat(*input); info == nil || err != nil { + fatal("File not exists") + } + + if *name == "" { + fatal("Name is required") + } + + if *outfile == "" { + fatal("Output is required") + } + + // output bytecode hex file to hex folder + hexOutputDir := filepath.Join( + filepath.Dir(*outfile), "hex") + os.MkdirAll(hexOutputDir, 0755) + + hexFileName := filepath.Base( + fmt.Sprintf("%s.hex", strings.TrimSuffix(*outfile, filepath.Ext(*outfile)))) + goFileName := strings.ToLower( + fmt.Sprintf("%s.go", strings.TrimSuffix(*outfile, filepath.Ext(*outfile)))) + + bytecodeStr, err := os.ReadFile(*input) + if err != nil { + fatal(err) + } + + bytecode := common.FromHex(strings.TrimSpace(string(bytecodeStr))) + if err := os.WriteFile(filepath.Join(hexOutputDir, hexFileName), bytecode, 0644); err != nil { + fatal(err) + } + + code := generateByteCode(*name, hexFileName, sha256sum(bytecodeStr), sha256sum(bytecode)) + + // create bytecode file + var header bytes.Buffer + fmt.Fprint(&header, "// Code generated by codeembed. DO NOT EDIT.\n\n") + + if err := os.WriteFile(goFileName, append(header.Bytes(), code...), 0644); err != nil { + fatal(err) + } +} + +func fatal(args ...interface{}) { + fmt.Fprintln(os.Stderr, args...) + os.Exit(1) +} + +func sha256sum(data []byte) string { + shasum := sha256.Sum256(data) + return hex.EncodeToString(shasum[:]) +} + +func generateByteCode(name, output, bytecodeSha256, binarySha256 string) []byte { + var code bytes.Buffer + fmt.Fprintf(&code, "package dccontracts\n\n") + fmt.Fprintf(&code, "import (\n") + fmt.Fprintf(&code, "\t_ \"embed\"\n") + fmt.Fprintf(&code, ")\n\n") + fmt.Fprintf(&code, "// ByteCodeSha256: %s\n", bytecodeSha256) + fmt.Fprintf(&code, "// BinaryByteCodeSha256: %s\n", binarySha256) + fmt.Fprintf(&code, "//go:embed hex/%s\n", output) + fmt.Fprintf(&code, "var %s []byte\n", name) + return code.Bytes() +} diff --git a/core/dccontracts/const.go b/core/dccontracts/const.go index 0be55fabee..16493ae974 100644 --- a/core/dccontracts/const.go +++ b/core/dccontracts/const.go @@ -6,3 +6,14 @@ const ( DCBridgeContract = "0x0000000000000000000000000000000000001002" DCVaultContract = "0x0000000000000000000000000000000000001003" ) + +//go:generate go run codeembed/main.go -name DCValidatorSetContractByteCode -output 1001_validator_set.go -input bytecode/1001-ValidatorSet.bin +//go:generate go run codeembed/main.go -name DCBridgeContractByteCode -output 1002_bridge.go -input bytecode/1002-Bridge.bin +//go:generate go run codeembed/main.go -name DCVaultContractByteCode -output 1003_vault.go -input bytecode/1003-Vault.bin + +// Portland hard fork +//go:generate go run codeembed/main.go -name DCBridgeContractPortlandByteCode -output 1002_bridge_portland.go -input bytecode/1002-Bridge-Portland.bin + +// Detroit hard fork +//go:generate go run codeembed/main.go -name DCValidatorSetContractDetroitByteCode -output 1001_validatorset_detroit.go -input bytecode/1001-ValidatorSet-Detroit.bin +//go:generate go run codeembed/main.go -name DCBridgeContractDetroitByteCode -output 1002_bridge_detroit.go -input bytecode/1002-Bridge-Detroit.bin diff --git a/core/dccontracts/hex/.gitkeep b/core/dccontracts/hex/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/core/dccontracts/hex/1001_validator_set.hex b/core/dccontracts/hex/1001_validator_set.hex new file mode 100644 index 0000000000..20d8f4c0b8 Binary files /dev/null and b/core/dccontracts/hex/1001_validator_set.hex differ diff --git a/core/dccontracts/hex/1001_validatorset_detroit.hex b/core/dccontracts/hex/1001_validatorset_detroit.hex new file mode 100644 index 0000000000..5dc7fd7f4d Binary files /dev/null and b/core/dccontracts/hex/1001_validatorset_detroit.hex differ diff --git a/core/dccontracts/hex/1002_bridge.hex b/core/dccontracts/hex/1002_bridge.hex new file mode 100644 index 0000000000..ac13d30d71 Binary files /dev/null and b/core/dccontracts/hex/1002_bridge.hex differ diff --git a/core/dccontracts/hex/1002_bridge_detroit.hex b/core/dccontracts/hex/1002_bridge_detroit.hex new file mode 100644 index 0000000000..07d36f3ee0 Binary files /dev/null and b/core/dccontracts/hex/1002_bridge_detroit.hex differ diff --git a/core/dccontracts/hex/1002_bridge_portland.hex b/core/dccontracts/hex/1002_bridge_portland.hex new file mode 100644 index 0000000000..c3dd0132b6 Binary files /dev/null and b/core/dccontracts/hex/1002_bridge_portland.hex differ diff --git a/core/dccontracts/hex/1003_vault.hex b/core/dccontracts/hex/1003_vault.hex new file mode 100644 index 0000000000..0f59ee9870 Binary files /dev/null and b/core/dccontracts/hex/1003_vault.hex differ diff --git a/core/dccontracts/upgrader.go b/core/dccontracts/upgrader.go index 026e6c7aa9..d2fbadd76c 100644 --- a/core/dccontracts/upgrader.go +++ b/core/dccontracts/upgrader.go @@ -1,7 +1,6 @@ package dccontracts import ( - "encoding/hex" "fmt" "math/big" @@ -23,7 +22,7 @@ type UpgradeConfig struct { AfterUpgrade upgradeHook ContractAddr common.Address CommitURL string - Code string + Code []byte DefaultInitStorage map[common.Hash]common.Hash // the initial storage must be backward compatible Rebalance map[common.Address]*big.Int // deprecated, only active in test network } @@ -70,7 +69,7 @@ func init() { { ContractAddr: common.HexToAddress(DCBridgeContract), CommitURL: "https://github.com/dogechain-lab/contracts/commit/bcaad0a8a050743855d294d58dac73f06fdc9585", - Code: "6080604052600436106101085760003560e01c8063715018a6116100955780639dc29fac116100645780639dc29fac14610321578063cd86a6cb1461034a578063d91921ed14610387578063eb12d61e146103b0578063f2fde38b146103d957610108565b8063715018a6146102775780637df73e271461028e5780638da5cb5b146102cb57806394cf795e146102f657610108565b806331fb67c2116100dc57806331fb67c2146101b557806334fcf437146101d15780634cde3a53146101fa57806354c4633e1461022557806367058d291461024e57610108565b8062a8efc71461010d57806318160ddd1461013657806319e5c034146101615780632c4e722e1461018a575b600080fd5b34801561011957600080fd5b50610134600480360381019061012f919061198e565b610402565b005b34801561014257600080fd5b5061014b6104ae565b6040516101589190611d88565b60405180910390f35b34801561016d57600080fd5b50610188600480360381019061018391906118a6565b6104b8565b005b34801561019657600080fd5b5061019f61082a565b6040516101ac9190611d88565b60405180910390f35b6101cf60048036038101906101ca9190611945565b610834565b005b3480156101dd57600080fd5b506101f860048036038101906101f3919061198e565b61092d565b005b34801561020657600080fd5b5061020f610a12565b60405161021c9190611d88565b60405180910390f35b34801561023157600080fd5b5061024c60048036038101906102479190611839565b610a1c565b005b34801561025a57600080fd5b506102756004803603810190610270919061198e565b610b63565b005b34801561028357600080fd5b5061028c610c48565b005b34801561029a57600080fd5b506102b560048036038101906102b09190611839565b610ce2565b6040516102c29190611c94565b60405180910390f35b3480156102d757600080fd5b506102e0610d38565b6040516102ed9190611c57565b60405180910390f35b34801561030257600080fd5b5061030b610d61565b6040516103189190611c72565b60405180910390f35b34801561032d57600080fd5b5061034860048036038101906103439190611866565b610def565b005b34801561035657600080fd5b50610371600480360381019061036c91906118a6565b610ee0565b60405161037e9190611c72565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a9919061198e565b610fb9565b005b3480156103bc57600080fd5b506103d760048036038101906103d29190611839565b611065565b005b3480156103e557600080fd5b5061040060048036038101906103fb9190611839565b6112a6565b005b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048790611d28565b60405180910390fd5b6104a5816006546113b090919063ffffffff16565b60068190555050565b6000600654905090565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053b90611d68565b60405180910390fd5b60008484848460405160200161055d9493929190611c11565b60405160208183030381529060405280519060200120905060006005600083815260200190815260200160002090508060040160149054906101000a900460ff16156105aa575050610824565b60005b816000018054905081101561064b573373ffffffffffffffffffffffffffffffffffffffff168260000182815481106105e9576105e86121a3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561063857505050610824565b808061064390612070565b9150506105ad565b50858160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848160010181905550828160030190805190602001906106b09291906116fc565b50838160020190805190602001906106c99291906116fc565b5080600001339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600280805490506107409190611ec4565b816000018054905011801561076457508060040160149054906101000a900460ff16155b156108215760018160040160146101000a81548160ff02191690831515021790555061079b856006546113c690919063ffffffff16565b60068190555080600101548160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fbceab28ca952a9177ce3716580d6c8c2d677fdf721b944e57a5e7322622ffdc98360020184600301604051610818929190611cd1565b60405180910390a35b50505b50505050565b6000600754905090565b600154341015610879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087090611d48565b60405180910390fd5b60006108a4612710610896600754346113dc90919063ffffffff16565b6113f290919063ffffffff16565b905060006108bb82346113b090919063ffffffff16565b90506108d2816006546113b090919063ffffffff16565b60068190555081813373ffffffffffffffffffffffffffffffffffffffff167f62116a798bb58cc967874bea4d771de2f9aeec6c64189ff2e5a551072f3106f9866040516109209190611caf565b60405180910390a4505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b290611d28565b60405180910390fd5b600060075490508160078190555081813373ffffffffffffffffffffffffffffffffffffffff167f9e31cca092b9e764bfc6b1b552d55ad4b035e609318fecc26cd38b34e8dd08bb60405160405180910390a45050565b6000600154905090565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa190611d28565b60405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b6057610b0581611408565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f013d6b862b532c38b01efed34c94d382085143963c63c76e87c24d4b7a37f98e60405160405180910390a35b50565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be890611d28565b60405180910390fd5b600060015490508160018190555081813373ffffffffffffffffffffffffffffffffffffffff167f480e8e496f7aff74972b0902e678fd5b564e4fb6527f0418da8a2c1aa628002260405160405180910390a45050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd90611d28565b60405180910390fd5b610ce06000611638565b565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805480602002602001604051908101604052809291908181526020018280548015610de557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610d9b575b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490611d28565b60405180910390fd5b610e92816006546113b090919063ffffffff16565b600681905550808273ffffffffffffffffffffffffffffffffffffffff167f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df760405160405180910390a35050565b6060600085858585604051602001610efb9493929190611c11565b60405160208183030381529060405280519060200120905060056000828152602001908152602001600020600001805480602002602001604051908101604052809291908181526020018280548015610fa957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f5f575b5050505050915050949350505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e90611d28565b60405180910390fd5b61105c816006546113c690919063ffffffff16565b60068190555050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90611d28565b60405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112a357600280549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506002819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8064a302796c89446a96d63470b5b036212da26bd2debe5bec73e0170a9a5e8360405160405180910390a35b50565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90611d28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b90611d08565b60405180910390fd5b6113ad81611638565b50565b600081836113be9190611f4f565b905092915050565b600081836113d49190611e6e565b905092915050565b600081836113ea9190611ef5565b905092915050565b600081836114009190611ec4565b905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060016002805490506114609190611f4f565b905080821461154f5760006002828154811061147f5761147e6121a3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080600284815481106114c1576114c06121a3565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060028054806115fe576115fd612174565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546117089061200d565b90600052602060002090601f01602090048101928261172a5760008555611771565b82601f1061174357805160ff1916838001178555611771565b82800160010185558215611771579182015b82811115611770578251825591602001919060010190611755565b5b50905061177e9190611782565b5090565b5b8082111561179b576000816000905550600101611783565b5090565b60006117b26117ad84611dc8565b611da3565b9050828152602081018484840111156117ce576117cd612206565b5b6117d9848285611fcb565b509392505050565b6000813590506117f0816122fd565b92915050565b600082601f83011261180b5761180a612201565b5b813561181b84826020860161179f565b91505092915050565b60008135905061183381612314565b92915050565b60006020828403121561184f5761184e612210565b5b600061185d848285016117e1565b91505092915050565b6000806040838503121561187d5761187c612210565b5b600061188b858286016117e1565b925050602061189c85828601611824565b9150509250929050565b600080600080608085870312156118c0576118bf612210565b5b60006118ce878288016117e1565b94505060206118df87828801611824565b935050604085013567ffffffffffffffff811115611900576118ff61220b565b5b61190c878288016117f6565b925050606085013567ffffffffffffffff81111561192d5761192c61220b565b5b611939878288016117f6565b91505092959194509250565b60006020828403121561195b5761195a612210565b5b600082013567ffffffffffffffff8111156119795761197861220b565b5b611985848285016117f6565b91505092915050565b6000602082840312156119a4576119a3612210565b5b60006119b284828501611824565b91505092915050565b60006119c783836119d3565b60208301905092915050565b6119dc81611f83565b82525050565b6119eb81611f83565b82525050565b611a026119fd82611f83565b6120b9565b82525050565b6000611a1382611e1e565b611a1d8185611e41565b9350611a2883611df9565b8060005b83811015611a59578151611a4088826119bb565b9750611a4b83611e34565b925050600181019050611a2c565b5085935050505092915050565b611a6f81611f95565b82525050565b6000611a8082611e29565b611a8a8185611e52565b9350611a9a818560208601611fda565b611aa381612215565b840191505092915050565b6000611ab982611e29565b611ac38185611e63565b9350611ad3818560208601611fda565b80840191505092915050565b60008154611aec8161200d565b611af68186611e52565b94506001821660008114611b115760018114611b2357611b56565b60ff1983168652602086019350611b56565b611b2c85611e09565b60005b83811015611b4e57815481890152600182019150602081019050611b2f565b808801955050505b50505092915050565b6000611b6c602683611e52565b9150611b7782612233565b604082019050919050565b6000611b8f601c83611e52565b9150611b9a82612282565b602082019050919050565b6000611bb2600683611e52565b9150611bbd826122ab565b602082019050919050565b6000611bd5601d83611e52565b9150611be0826122d4565b602082019050919050565b611bf481611fc1565b82525050565b611c0b611c0682611fc1565b6120dd565b82525050565b6000611c1d82876119f1565b601482019150611c2d8286611bfa565b602082019150611c3d8285611aae565b9150611c498284611aae565b915081905095945050505050565b6000602082019050611c6c60008301846119e2565b92915050565b60006020820190508181036000830152611c8c8184611a08565b905092915050565b6000602082019050611ca96000830184611a66565b92915050565b60006020820190508181036000830152611cc98184611a75565b905092915050565b60006040820190508181036000830152611ceb8185611adf565b90508181036020830152611cff8184611adf565b90509392505050565b60006020820190508181036000830152611d2181611b5f565b9050919050565b60006020820190508181036000830152611d4181611b82565b9050919050565b60006020820190508181036000830152611d6181611ba5565b9050919050565b60006020820190508181036000830152611d8181611bc8565b9050919050565b6000602082019050611d9d6000830184611beb565b92915050565b6000611dad611dbe565b9050611db9828261203f565b919050565b6000604051905090565b600067ffffffffffffffff821115611de357611de26121d2565b5b611dec82612215565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000611e7982611fc1565b9150611e8483611fc1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611eb957611eb86120e7565b5b828201905092915050565b6000611ecf82611fc1565b9150611eda83611fc1565b925082611eea57611ee9612116565b5b828204905092915050565b6000611f0082611fc1565b9150611f0b83611fc1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611f4457611f436120e7565b5b828202905092915050565b6000611f5a82611fc1565b9150611f6583611fc1565b925082821015611f7857611f776120e7565b5b828203905092915050565b6000611f8e82611fa1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611ff8578082015181840152602081019050611fdd565b83811115612007576000848401525b50505050565b6000600282049050600182168061202557607f821691505b6020821081141561203957612038612145565b5b50919050565b61204882612215565b810181811067ffffffffffffffff82111715612067576120666121d2565b5b80604052505050565b600061207b82611fc1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156120ae576120ad6120e7565b5b600182019050919050565b60006120c4826120cb565b9050919050565b60006120d682612226565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f776e65722063616e2063616c6c2066756e6374696f6e00000000600082015250565b7f466f726269640000000000000000000000000000000000000000000000000000600082015250565b7f4f6e6c79207369676e65722063616e2063616c6c2066756e6374696f6e000000600082015250565b61230681611f83565b811461231157600080fd5b50565b61231d81611fc1565b811461232857600080fd5b5056fea26469706673582212208879968f26c5ad21d7e3b58081ca73de324deb7256e1760798788f290bffec8364736f6c63430008060033", + Code: DCBridgeContractPortlandByteCode, }, }, } @@ -85,7 +84,7 @@ func init() { { ContractAddr: common.HexToAddress(DCValidatorSetContract), CommitURL: "https://github.com/dogechain-lab/contracts/commit/675c539c5c06b85e3a9ddc060f14e8d12c97a22e", - Code: "608060405234801561001057600080fd5b50600436106103f15760003560e01c80638aee812711610215578063c2a45d4d11610125578063e1a2e863116100b8578063f7c618c111610087578063f7c618c1146108d1578063f90ecacc146108e9578063facd743b146108fc578063fd9275db1461090f578063fda259e01461092257600080fd5b8063e1a2e86314610885578063e589b61e14610898578063ede5d558146108ab578063f2fde38b146108be57600080fd5b8063ced5bcc1116100f4578063ced5bcc114610841578063d0e30db014610849578063d431b1ac14610851578063d946d27a1461085957600080fd5b8063c2a45d4d1461080b578063c60453a81461081e578063c96be4cb14610826578063ca1e78191461083957600080fd5b8063aea0e78b116101a8578063b7ab4db511610177578063b7ab4db5146107c0578063bb872b4a146107d5578063be199738146107e8578063bebe9daf146107f0578063c0541aaa146107f857600080fd5b8063aea0e78b14610795578063aed1d4031461079d578063b46e5520146107a5578063b4e2fad6146107b857600080fd5b80639dbf97db116101e45780639dbf97db146106e9578063a2526bd3146106f1578063a310624f14610746578063ae2b3e831461078257600080fd5b80638aee8127146106925780638da5cb5b146106a557806395b5a5ee146106b657806396a602f3146106c957600080fd5b806349df8d33116103105780636eab12bd116102a3578063751bf20211610272578063751bf20214610648578063766718081461065b5780637a34e211146106635780637bc897de146106765780638043c10c1461068957600080fd5b80636eab12bd146105ee5780636f8568471461061a57806372d29f641461062257806373a3dda61461063557600080fd5b806359cdb14b116102df57806359cdb14b146105be5780635b9db75a146105c65780635c975abb146105d95780636cbe6cd8146105e657600080fd5b806349df8d331461054b5780634d99dd16146105535780634f558e7914610566578063500a15641461059957600080fd5b806325646e1f116103885780633c21ec87116103575780633c21ec87146104f45780633cd1ecf5146104fc57806340a141ff146105255780634878f4011461053857600080fd5b806325646e1f146104c957806332cc6f08146104dc578063346c90a8146104e4578063373d6132146104ec57600080fd5b8063179b4408116103c4578063179b4408146104705780631e83409a146104905780631fe97684146104a357806320146774146104b657600080fd5b8063026e402b146103f65780630397d4581461040b578063097475f71461041e5780630ca95cf11461044f575b600080fd5b610409610404366004613ab5565b610935565b005b610409610419366004613a19565b610c3d565b61043161042c366004613a19565b610cb9565b60405161044699989796959493929190613ca7565b60405180910390f35b61046261045d366004613a34565b610d99565b604051908152602001610446565b61046261047e366004613a19565b601c6020526000908152604090205481565b61040961049e366004613a19565b610dc6565b6104096104b1366004613a19565b6110fe565b6104096104c4366004613b8b565b611212565b6104096104d7366004613ba4565b611275565b600b54610462565b600c54610462565b600854610462565b6104096112e0565b61046261050a366004613a19565b6001600160a01b03166000908152601c602052604090205490565b610409610533366004613a19565b611426565b610409610546366004613b8b565b6116cc565b600a54610462565b610409610561366004613ab5565b61172f565b610589610574366004613b8b565b601d6020526000908152604090205460ff1681565b6040519015158152602001610446565b6009546001600160a01b03165b6040516001600160a01b039091168152602001610446565b601254610462565b6104096105d4366004613b8b565b611ab3565b6013546105899060ff1681565b600f54610462565b6104626105fc366004613a19565b6001600160a01b03166000908152601a602052604090206003015490565b601154610462565b610409610630366004613a67565b611b16565b610409610643366004613a19565b611bae565b610409610656366004613b8b565b611d16565b610462611d79565b610409610671366004613b8b565b611d95565b610462610684366004613a34565b611df8565b61046260145481565b6104096106a0366004613a19565b611fc5565b6001546001600160a01b03166105a6565b6104096106c4366004613a19565b612049565b6104626106d7366004613a19565b601e6020526000908152604090205481565b600d54610462565b61072b6106ff366004613a34565b601b60209081526000928352604080842090915290825290208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610446565b610775610754366004613a19565b6001600160a01b03166000908152601a602052604090206007015460ff1690565b6040516104469190613c86565b610409610790366004613b34565b61236f565b6104626125cd565b6104626125dc565b6104096107b3366004613a19565b612664565b600354610462565b6107c861271a565b6040516104469190613c39565b6104096107e3366004613b8b565b612726565b600e54610462565b610462612789565b610462610806366004613a19565b612795565b610409610819366004613b8b565b6127b6565b610462612819565b610409610834366004613a19565b612825565b6107c8612952565b601054610462565b610409612e93565b610409612fed565b610462610867366004613a19565b6001600160a01b03166000908152601a602052604090206004015490565b610409610893366004613b8b565b61302b565b6104096108a6366004613a19565b61308e565b6107c86108b9366004613adf565b613186565b6104096108cc366004613a19565b613271565b6013546105a69061010090046001600160a01b031681565b6105a66108f7366004613b8b565b613309565b61058961090a366004613a19565b613333565b61040961091d366004613b8b565b613340565b610409610930366004613a19565b6133a3565b32331461095d5760405162461bcd60e51b815260040161095490613d6f565b60405180910390fd5b600260005414156109805760405162461bcd60e51b815260040161095490613e0f565b600260005560135460ff16156109a85760405162461bcd60e51b815260040161095490613d45565b6012548110156109ca5760405162461bcd60e51b815260040161095490613dee565b6009546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015610a1c57600080fd5b505af1158015610a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a549190613b12565b506001600160a01b0382166000818152601b602090815260408083203384528252808320938352601a90915290206002600782015460ff166003811115610a9d57610a9d613f44565b14610aba5760405162461bcd60e51b815260040161095490613da6565b6000610af48360010154610aee64e8d4a51000610ae88660050154886000015461346f90919063ffffffff16565b90613482565b9061348e565b90508015610b865760135460405163a9059cbb60e01b8152336004820152602481018390526101009091046001600160a01b03169063a9059cbb90604401602060405180830381600087803b158015610b4c57600080fd5b505af1158015610b60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b849190613b12565b505b610b8e611d79565b60028401558254610b9f908561349a565b8084556005830154610bbc9164e8d4a5100091610ae8919061346f565b60018401556003820154610bd0908561349a565b6003830155600854610be2908561349a565b600855610bf08533866134a6565b6040518481526001600160a01b0386169033907fe5541a6b6103d4fa7e021ed54fad39c66f27a76bd13d374cf6240ae6bd0bb72b906020015b60405180910390a350506001600055505050565b6001546001600160a01b03163314610c675760405162461bcd60e51b815260040161095490613d0e565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f3792de2485bcc1adb436c37819f81339378f5ec98f5b3534f7b71b70b5d31c0390600090a35050565b601a60205260009081526040902080548190610cd490613ed8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0090613ed8565b8015610d4d5780601f10610d2257610100808354040283529160200191610d4d565b820191906000526020600020905b815481529060010190602001808311610d3057829003601f168201915b5050505060018301546002840154600385015460048601546005870154600688015460079098015496976001600160a01b03909516969395509193909260ff8082169161010090041689565b6001600160a01b038083166000908152601b60209081526040808320938516835292905220545b92915050565b323314610de55760405162461bcd60e51b815260040161095490613d6f565b60026000541415610e085760405162461bcd60e51b815260040161095490613e0f565b600260005560135460ff1615610e305760405162461bcd60e51b815260040161095490613d45565b6001600160a01b0381166000908152601b6020908152604080832033845290915290208054610e945760405162461bcd60e51b815260206004820152601060248201526f6e6f7468696e6720746f20636c61696d60801b6044820152606401610954565b6001600160a01b0382166000908152601a602052604080822081516101208101909252805482908290610ec690613ed8565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef290613ed8565b8015610f3f5780601f10610f1457610100808354040283529160200191610f3f565b820191906000526020600020905b815481529060010190602001808311610f2257829003601f168201915b505050918352505060018201546001600160a01b0316602082015260028201546040820152600380830154606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e09092019160ff1690811115610fab57610fab613f44565b6003811115610fbc57610fbc613f44565b815260079190910154610100900460ff161515602090910152600183015460a082015184549293506000926110019291610aee9164e8d4a5100091610ae8919061346f565b905080156110b35760a082015183546110249164e8d4a5100091610ae89161346f565b600184015560135460405163a9059cbb60e01b8152336004820152602481018390526101009091046001600160a01b03169063a9059cbb90604401602060405180830381600087803b15801561107957600080fd5b505af115801561108d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b19190613b12565b505b6040518181526001600160a01b0385169033907ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839060200160405180910390a3505060016000555050565b6001546001600160a01b031633146111285760405162461bcd60e51b815260040161095490613d0e565b6001600160a01b0381166000908152601a6020526040902060035461114b6125dc565b116111685760405162461bcd60e51b815260040161095490613e46565b6002600782015460ff16600381111561118357611183613f44565b146111a05760405162461bcd60e51b815260040161095490613da6565b6007810180546001919060ff191682805b021790555060078101546001600160a01b038316907f0c5c3450e67dce49a08116ce351f3a67c5b7d3217c607162d91189a7229174ea9060ff1660038111156111fc576111fc613f44565b6040519081526020015b60405180910390a25050565b6001546001600160a01b0316331461123c5760405162461bcd60e51b815260040161095490613d0e565b600b805490829055604051829082907f3d657b82c31a672b7a8765b72f6f5e966cfb980ed039570a39ccdd70bf19c26690600090a35050565b6001546001600160a01b0316331461129f5760405162461bcd60e51b815260040161095490613d0e565b6010805463ffffffff83169182905560405190919082907f7414a33d82c698855ef5ed249e10e2f7481971f83f98cee8d7023f15ae0e881f90600090a35050565b6001546001600160a01b0316331461130a5760405162461bcd60e51b815260040161095490613d0e565b60005b6004548110156114175760006004828154811061132c5761132c613f70565b60009182526020808320909101546001600160a01b0316808352601a9091526040822090925090600782015460ff16600381111561136c5761136c613f44565b1415611402576001810180546001600160a01b0384166001600160a01b031990911617905560078101805460ff191660021790556113a9826134fc565b5060078101546001600160a01b038316907f0c5c3450e67dce49a08116ce351f3a67c5b7d3217c607162d91189a7229174ea9060ff1660038111156113f0576113f0613f44565b60405190815260200160405180910390a25b5050808061140f90613f13565b91505061130d565b506114246004600061387f565b565b6001546001600160a01b031633146114505760405162461bcd60e51b815260040161095490613d0e565b6001600160a01b0381166000908152601a60205260408082208151610120810190925280548290829061148290613ed8565b80601f01602080910402602001604051908101604052809291908181526020018280546114ae90613ed8565b80156114fb5780601f106114d0576101008083540402835291602001916114fb565b820191906000526020600020905b8154815290600101906020018083116114de57829003601f168201915b505050918352505060018201546001600160a01b0316602082015260028201546040820152600380830154606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e09092019160ff169081111561156757611567613f44565b600381111561157857611578613f44565b815260079190910154610100900460ff161515602090910152905060008160e0015160038111156115ab576115ab613f44565b14156115e55760405162461bcd60e51b81526020600482015260096024820152681b9bdd08199bdd5b9960ba1b6044820152606401610954565b6060810151156116245760405162461bcd60e51b815260206004820152600a6024820152691a185cc81cdd185ad95960b21b6044820152606401610954565b61162d82613509565b506001600160a01b0382166000908152601a6020526040812090611651828261389d565b506001810180546001600160a01b0319169055600060028201819055600382018190556004820181905560058201819055600682018190556007909101805461ffff191690556040516001600160a01b038416917fe1434e25d6611e0db941968fdc97811c982ac1602e951637d206f5fdda9dd8f191a25050565b6001546001600160a01b031633146116f65760405162461bcd60e51b815260040161095490613d0e565b600e805490829055604051829082907fb64c2fee5d0035d3aa1122935a0d2800f151a0853dd89adbabb795a6190f8be090600090a35050565b32331461174e5760405162461bcd60e51b815260040161095490613d6f565b600260005414156117715760405162461bcd60e51b815260040161095490613e0f565b600260005560135460ff16156117995760405162461bcd60e51b815260040161095490613d45565b6001600160a01b0382166000908152601b602090815260408083203384529091529020805482118015906117cd5750600082115b61180e5760405162461bcd60e51b81526020600482015260126024820152716e6f7468696e6720746f20756e7374616b6560701b6044820152606401610954565b611816611d79565b61182d826002015461182760105490565b9061349a565b1061186c5760405162461bcd60e51b815260206004820152600f60248201526e65706f6368206e6f7420616c6c6f7760881b6044820152606401610954565b6001600160a01b038084166000908152601a6020526040902060018101549091163314156118ce5760405162461bcd60e51b815260206004820152600f60248201526e6f776e6572206e6f7420616c6c6f7760881b6044820152606401610954565b60006118fc8360010154610aee64e8d4a51000610ae88660050154886000015461346f90919063ffffffff16565b9050801561198e5760135460405163a9059cbb60e01b8152336004820152602481018390526101009091046001600160a01b03169063a9059cbb90604401602060405180830381600087803b15801561195457600080fd5b505af1158015611968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198c9190613b12565b505b825461199a908561348e565b80845560058301546119b79164e8d4a5100091610ae8919061346f565b600184015560038201546119cb908561348e565b60038301556008546119dd908561348e565b6008556119eb853386613516565b60095460405163a9059cbb60e01b8152336004820152602481018690526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015611a3757600080fd5b505af1158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f9190613b12565b5060408051858152602081018390526001600160a01b0387169133917f3aace7340547de7b9156593a7652dc07ee900cea3fd8f82cb6c9d38b408298029101610c29565b6001546001600160a01b03163314611add5760405162461bcd60e51b815260040161095490613d0e565b6012805490829055604051829082907fc18cde4032061961886377a68e664be72416785473fa678fa416ed2a31c1b10f90600090a35050565b6001600160a01b038281166000908152601a6020526040902060018101549091163314611b555760405162461bcd60e51b815260040161095490613dca565b8151611b6790829060208501906138d7565b50826001600160a01b03167f8a0ff04a1f70e76c640c0520aa1550c775b38ce28af05fdaee467ad160d05fb183604051611ba19190613c94565b60405180910390a2505050565b323314611bcd5760405162461bcd60e51b815260040161095490613d6f565b60135460ff1615611bf05760405162461bcd60e51b815260040161095490613d45565b6000611bfa611d79565b6001600160a01b0383166000908152601a602052604090209091506003600782015460ff166003811115611c3057611c30613f44565b14611c4d5760405162461bcd60e51b815260040161095490613da6565b60018101546001600160a01b03163314611c795760405162461bcd60e51b815260040161095490613dca565b80600201548211611cbc5760405162461bcd60e51b815260206004820152600d60248201526c1cdd1a5b1b081a5b881a985a5b609a1b6044820152606401610954565b60078101805460ff19166002908117909155600060068301819055908201556040518281526001600160a01b038416907f198b4f09d57ab5dbbf891a135940a04087b2544bebf3506cc81e1b64063b6d6590602001611ba1565b6001546001600160a01b03163314611d405760405162461bcd60e51b815260040161095490613d0e565b600f805490829055604051829082907fdf736d7e2a17c66d20e9bd8c8b51ee5d59a97733dde732893d13fee45469f99b90600090a35050565b6000611d90600c544361348290919063ffffffff16565b905090565b6001546001600160a01b03163314611dbf5760405162461bcd60e51b815260040161095490613d0e565b6003805490829055604051829082907fd1d3d2f30aaedd8fa08451e0514e0d6cd5b86a0e19d7d769d0c2a24495beeb0890600090a35050565b6001600160a01b038083166000908152601b6020908152604080832093851683529281528282208351606081018552815480825260018301549382019390935260029091015493810193909352909190611e56576000915050610dc0565b6001600160a01b0384166000908152601a602052604080822081516101208101909252805482908290611e8890613ed8565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb490613ed8565b8015611f015780601f10611ed657610100808354040283529160200191611f01565b820191906000526020600020905b815481529060010190602001808311611ee457829003601f168201915b505050918352505060018201546001600160a01b0316602082015260028201546040820152600380830154606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e09092019160ff1690811115611f6d57611f6d613f44565b6003811115611f7e57611f7e613f44565b815260079190910154610100900460ff16151560209182015283015160a08201518451929350611fbc92610aee9164e8d4a5100091610ae89161346f565b95945050505050565b6001546001600160a01b03163314611fef5760405162461bcd60e51b815260040161095490613d0e565b601380546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907fab27a2419bd7a3bc605bff66b38aacb84061d9e20edab7f7680ce52e6fcd925690600090a35050565b3233146120685760405162461bcd60e51b815260040161095490613d6f565b6002600054141561208b5760405162461bcd60e51b815260040161095490613e0f565b600260005560135460ff16156120b35760405162461bcd60e51b815260040161095490613d45565b6001600160a01b038181166000908152601a60205260409020600181015490911633146120f25760405162461bcd60e51b815260040161095490613dca565b6001600160a01b0382166000908152601b60209081526040808320338452909152902080546121585760405162461bcd60e51b81526020600482015260126024820152716e6f7468696e6720746f20756e7374616b6560701b6044820152606401610954565b6003546121636125dc565b116121805760405162461bcd60e51b815260040161095490613e46565b8054600182015460058401546000916121a991610aee9064e8d4a5100090610ae890879061346f565b9050801561223b5760135460405163a9059cbb60e01b8152336004820152602481018390526101009091046001600160a01b03169063a9059cbb90604401602060405180830381600087803b15801561220157600080fd5b505af1158015612215573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122399190613b12565b505b6001600160a01b0385166000908152601b6020908152604080832033845290915281208181556001810182905560020155600384015461227b908361348e565b600385015560078401805460ff1916600117905560085461229c908361348e565b6008556122aa853384613516565b60095460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b1580156122f657600080fd5b505af115801561230a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232e9190613b12565b506040516001600160a01b038616907fe1434e25d6611e0db941968fdc97811c982ac1602e951637d206f5fdda9dd8f190600090a250506001600055505050565b32331461238e5760405162461bcd60e51b815260040161095490613d6f565b600260005414156123b15760405162461bcd60e51b815260040161095490613e0f565b600260005560135460ff16156123d95760405162461bcd60e51b815260040161095490613d45565b6011548110156123fb5760405162461bcd60e51b815260040161095490613dee565b6009546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561244d57600080fd5b505af1158015612461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124859190613b12565b506001600160a01b0382166000908152601a6020526040812090600782015460ff1660038111156124b8576124b8613f44565b146124f55760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e48195e1a5cdd609a1b6044820152606401610954565b6001600160a01b0383166000908152601b6020908152604080832033845282529091208551909161252a9184918801906138d7565b50600180830180546001600160a01b0319163317905560078301805460ff19168280021790555060038201839055612560611d79565b6002820155828155600854612575908461349a565b600855612581846134fc565b5061258d8433856134a6565b6040516001600160a01b038516907fe366c1c0452ed8eec96861e9e54141ebff23c9ec89fe27b996b45f5ec388498790600090a250506001600055505050565b6000611d906001611827611d79565b6000806125e7612789565b90506000805b8281101561265d57600061260260158361359c565b905060026001600160a01b0382166000908152601a602052604090206007015460ff16600381111561263657612636613f44565b141561264a578261264681613f13565b9350505b508061265581613f13565b9150506125ed565b5092915050565b6001546001600160a01b0316331461268e5760405162461bcd60e51b815260040161095490613d0e565b6001600160a01b0381166000908152601a60205260409020601154816003015410156126cc5760405162461bcd60e51b815260040161095490613dee565b6001600782015460ff1660038111156126e7576126e7613f44565b146127045760405162461bcd60e51b815260040161095490613da6565b6007810180546002919060ff19166001836111b1565b6060611d9060156135a8565b6001546001600160a01b031633146127505760405162461bcd60e51b815260040161095490613d0e565b600a805490829055604051829082907f79a5349732f93288abbb68e251c3dfc325bf3ee6fde7786d919155d39733e0f590600090a35050565b6000611d9060156135b5565b6001600160a01b0381166000908152601960205260408120610dc0906135b5565b6001546001600160a01b031633146127e05760405162461bcd60e51b815260040161095490613d0e565b600d805490829055604051829082907fad65adbcfea0d9e94f88fee2e0422a61d519dc522506374972587aefe7194bd490600090a35050565b6000611d9060176135b5565b4133146128745760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920636f696e626173652063616e2063616c6c2066756e6374696f6e006044820152606401610954565b336000908152601e602052604090205461288f90600161349a565b336000908152601e60209081526040808320939093556001600160a01b0384168252601a9052206002600782015460ff1660038111156128d1576128d1613f44565b141561294e5760006128e1611d79565b905060006128fd6001846006015461349a90919063ffffffff16565b6006840181905560408051828152602081018590529192506001600160a01b038616917f83b04ecf7330997e742429a641e136d9f3698c3e9ac9cb9ce0cc2d6da36a244d910160405180910390a250505b5050565b600454606090156129bd5760048054806020026020016040519081016040528092919081815260200182805480156129b357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612995575b5050505050905090565b60006129c7612789565b905060008167ffffffffffffffff8111156129e4576129e4613f86565b604051908082528060200260200182016040528015612a0d578160200160208202803683370190505b5090506000805b83811015612aaf576000612a2960158361359c565b905060026001600160a01b0382166000908152601a602052604090206007015460ff166003811115612a5d57612a5d613f44565b1415612a9c5780848481518110612a7657612a76613f70565b6001600160a01b039092166020928302919091019091015282612a9881613f13565b9350505b5080612aa781613f13565b915050612a14565b506000612abb600b5490565b905081811115612acc575080612e8a565b60005b81811015612e885760008190506000601a6000878481518110612af457612af4613f70565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060405180610120016040529081600082018054612b3890613ed8565b80601f0160208091040260200160405190810160405280929190818152602001828054612b6490613ed8565b8015612bb15780601f10612b8657610100808354040283529160200191612bb1565b820191906000526020600020905b815481529060010190602001808311612b9457829003601f168201915b505050918352505060018201546001600160a01b0316602082015260028201546040820152600380830154606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e09092019160ff1690811115612c1d57612c1d613f44565b6003811115612c2e57612c2e613f44565b815260079190910154610100900460ff16151560209091015290506000612c56846001613e68565b90505b85811015612df9576000601a6000898481518110612c7957612c79613f70565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060405180610120016040529081600082018054612cbd90613ed8565b80601f0160208091040260200160405190810160405280929190818152602001828054612ce990613ed8565b8015612d365780601f10612d0b57610100808354040283529160200191612d36565b820191906000526020600020905b815481529060010190602001808311612d1957829003601f168201915b505050918352505060018201546001600160a01b0316602082015260028201546040820152600380830154606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e09092019160ff1690811115612da257612da2613f44565b6003811115612db357612db3613f44565b815260079190910154610100900460ff161515602090910152606081810151908501519192501115612de6578193508092505b5080612df181613f13565b915050612c59565b50858281518110612e0c57612e0c613f70565b6020026020010151868481518110612e2657612e26613f70565b6020026020010151878581518110612e4057612e40613f70565b60200260200101888581518110612e5957612e59613f70565b6001600160a01b0393841660209182029290920101529116905250819050612e8081613f13565b915050612acf565b505b82525092915050565b413314612ee25760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920636f696e626173652063616e2063616c6c2066756e6374696f6e006044820152606401610954565b336000908152601a602052604090206002600782015460ff166003811115612f0c57612f0c613f44565b148015612f1d575060008160030154115b8015612f395750436000908152601d602052604090205460ff16155b15612fea57436000908152601d60205260409020805460ff19166001179055600a54601454612f679161349a565b6014556003810154600a54600091612f8891610ae89064e8d4a5100061346f565b6005830154909150612f9a908261349a565b6005830155600a546004830154612fb09161349a565b6004830155600a5460405190815233907f62bf3b2d86d93be4bb7aa06117c0e1719716f019f3265fdef4df36510ae5070a90602001611206565b50565b6001546001600160a01b031633146130175760405162461bcd60e51b815260040161095490613d0e565b6013805460ff19811660ff90911615179055565b6001546001600160a01b031633146130555760405162461bcd60e51b815260040161095490613d0e565b6011805490829055604051829082907f207082661d623a88e041ad2d52c2d4ddc719880c70c3ab44aa81accff9bd86ed90600090a35050565b6001546001600160a01b031633146130b85760405162461bcd60e51b815260040161095490613d0e565b6001600160a01b0381166000908152601a60205260409020600e54816006015410156130f65760405162461bcd60e51b815260040161095490613dee565b6003546131016125dc565b1161311e5760405162461bcd60e51b815260040161095490613e46565b6000613128611d79565b905061313781611827600f5490565b600283015560078201805460ff191660031790556040518181526001600160a01b038416907feb7d7a49847ec491969db21a0e31b234565a9923145a2d1b56a75c9e9582580290602001611ba1565b606060008267ffffffffffffffff8111156131a3576131a3613f86565b6040519080825280602002602001820160405280156131cc578160200160208202803683370190505b50905060006131da86612795565b90506000855b6131ea8688613e68565b8110156132655782811015613253576001600160a01b038816600090815260196020526040902061321b908261359c565b84838151811061322d5761322d613f70565b6001600160a01b03909216602092830291909101909101528161324f81613f13565b9250505b8061325d81613f13565b9150506131e0565b50825250949350505050565b6001546001600160a01b0316331461329b5760405162461bcd60e51b815260040161095490613d0e565b6001600160a01b0381166133005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610954565b612fea816135bf565b6004818154811061331957600080fd5b6000918252602090912001546001600160a01b0316905081565b6000610dc0601583613611565b6001546001600160a01b0316331461336a5760405162461bcd60e51b815260040161095490613d0e565b600c805490829055604051829082907f62d532a388a6e5e7ad8089a8aff169a6045b666b20a5a11070805ffc8ed16ee190600090a35050565b6001546001600160a01b031633146133cd5760405162461bcd60e51b815260040161095490613d0e565b6001600160a01b0381166000908152601a602052604090206003600782015460ff16600381111561340057613400613f44565b1461341d5760405162461bcd60e51b815260040161095490613da6565b60078101805460ff19166002908117909155600060068301819055908201556001600160a01b0382167f198b4f09d57ab5dbbf891a135940a04087b2544bebf3506cc81e1b64063b6d656111fc611d79565b600061347b8284613ea2565b9392505050565b600061347b8284613e80565b600061347b8284613ec1565b600061347b8284613e68565b6001600160a01b0382166000908152601c60205260409020546134c9908261349a565b6001600160a01b0383166000908152601c60205260409020556134eb82613633565b506134f68383613640565b50505050565b6000610dc060158361365e565b6000610dc0601583613673565b6001600160a01b0382166000908152601c6020526040902054613539908261348e565b6001600160a01b0383166000908152601c602052604090208190556135635761356182613688565b505b6001600160a01b038084166000908152601b6020908152604080832093861683529290522054613597576134f68383613695565b505050565b600061347b83836136b7565b6060600061347b836136e1565b6000610dc0825490565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0381166000908152600183016020526040812054151561347b565b6000610dc060178361365e565b6001600160a01b038216600090815260196020526040812061347b90835b600061347b836001600160a01b03841661373d565b600061347b836001600160a01b03841661378c565b6000610dc0601783613673565b6001600160a01b038216600090815260196020526040812061347b9083613673565b60008260000182815481106136ce576136ce613f70565b9060005260206000200154905092915050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561373157602002820191906000526020600020905b81548152602001906001019080831161371d575b50505050509050919050565b600081815260018301602052604081205461378457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610dc0565b506000610dc0565b600081815260018301602052604081205480156138755760006137b0600183613ec1565b85549091506000906137c490600190613ec1565b90508181146138295760008660000182815481106137e4576137e4613f70565b906000526020600020015490508087600001848154811061380757613807613f70565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061383a5761383a613f5a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610dc0565b6000915050610dc0565b5080546000825590600052602060002090810190612fea919061395b565b5080546138a990613ed8565b6000825580601f106138b9575050565b601f016020900490600052602060002090810190612fea919061395b565b8280546138e390613ed8565b90600052602060002090601f016020900481019282613905576000855561394b565b82601f1061391e57805160ff191683800117855561394b565b8280016001018555821561394b579182015b8281111561394b578251825591602001919060010190613930565b5061395792915061395b565b5090565b5b80821115613957576000815560010161395c565b80356001600160a01b038116811461398757600080fd5b919050565b600082601f83011261399d57600080fd5b813567ffffffffffffffff808211156139b8576139b8613f86565b604051601f8301601f19908116603f011681019082821181831017156139e0576139e0613f86565b816040528381528660208588010111156139f957600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215613a2b57600080fd5b61347b82613970565b60008060408385031215613a4757600080fd5b613a5083613970565b9150613a5e60208401613970565b90509250929050565b60008060408385031215613a7a57600080fd5b613a8383613970565b9150602083013567ffffffffffffffff811115613a9f57600080fd5b613aab8582860161398c565b9150509250929050565b60008060408385031215613ac857600080fd5b613ad183613970565b946020939093013593505050565b600080600060608486031215613af457600080fd5b613afd84613970565b95602085013595506040909401359392505050565b600060208284031215613b2457600080fd5b8151801515811461347b57600080fd5b600080600060608486031215613b4957600080fd5b833567ffffffffffffffff811115613b6057600080fd5b613b6c8682870161398c565b935050613b7b60208501613970565b9150604084013590509250925092565b600060208284031215613b9d57600080fd5b5035919050565b600060208284031215613bb657600080fd5b813563ffffffff8116811461347b57600080fd5b60048110613be857634e487b7160e01b600052602160045260246000fd5b9052565b6000815180845260005b81811015613c1257602081850181015186830182015201613bf6565b81811115613c24576000602083870101525b50601f01601f19169290920160200192915050565b6020808252825182820181905260009190848201906040850190845b81811015613c7a5783516001600160a01b031683529284019291840191600101613c55565b50909695505050505050565b60208101610dc08284613bca565b60208152600061347b6020830184613bec565b6000610120808352613cbb8184018d613bec565b91505060018060a01b038a1660208301528860408301528760608301528660808301528560a08301528460c0830152613cf760e0830185613bca565b8215156101008301529a9950505050505050505050565b6020808252601c908201527f4f6e6c79206f776e65722063616e2063616c6c2066756e6374696f6e00000000604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601a908201527f4f6e6c7920454f412063616e2063616c6c2066756e6374696f6e000000000000604082015260600190565b6020808252600a90820152696261642073746174757360b01b604082015260600190565b6020808252600a908201526937b7363c9037bbb732b960b11b604082015260600190565b602080825260079082015266746f6f206c6f7760c81b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260089082015267746f6f206c65737360c01b604082015260600190565b60008219821115613e7b57613e7b613f2e565b500190565b600082613e9d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613ebc57613ebc613f2e565b500290565b600082821015613ed357613ed3613f2e565b500390565b600181811c90821680613eec57607f821691505b60208210811415613f0d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613f2757613f27613f2e565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212208a6a273edf434835fe48e693769fb5d82273f3735a620955d164cd3c4ff7b53364736f6c63430008060033", + Code: DCValidatorSetContractDetroitByteCode, DefaultInitStorage: map[common.Hash]common.Hash{ common.HexToHash("0x000000000000000000000000000000000000000a"): common.HexToHash("0xde0b6b3a7640000"), // rewardPerBlock common.HexToHash("0x000000000000000000000000000000000000000b"): common.HexToHash("0x19"), // activeValidatorsLength @@ -101,7 +100,7 @@ func init() { { ContractAddr: common.HexToAddress(DCBridgeContract), CommitURL: "https://github.com/dogechain-lab/contracts/commit/675c539c5c06b85e3a9ddc060f14e8d12c97a22e", - Code: "60806040526004361061012a5760003560e01c806367058d29116100ab5780639dc29fac1161006f5780639dc29fac14610314578063cd86a6cb14610334578063d431b1ac14610354578063de242ff414610369578063eb12d61e1461037f578063f2fde38b1461039f57600080fd5b806367058d291461025c578063715018a61461027c5780637df73e27146102915780638da5cb5b146102ca57806394cf795e146102f257600080fd5b806331fb67c2116100f257806331fb67c2146101ca57806334fcf437146101dd5780634cde3a53146101fd57806354c4633e146102125780635c975abb1461023257600080fd5b806310bad4cf1461012f57806311e330b21461015157806318160ddd1461017157806319e5c034146101955780632c4e722e146101b5575b600080fd5b34801561013b57600080fd5b5061014f61014a366004611084565b6103bf565b005b34801561015d57600080fd5b5061014f61016c366004611084565b610405565b34801561017d57600080fd5b506006545b6040519081526020015b60405180910390f35b3480156101a157600080fd5b5061014f6101b0366004610fc9565b61043c565b3480156101c157600080fd5b50600754610182565b61014f6101d8366004611047565b6106da565b3480156101e957600080fd5b5061014f6101f8366004611084565b6107bf565b34801561020957600080fd5b50600154610182565b34801561021e57600080fd5b5061014f61022d366004610f84565b610824565b34801561023e57600080fd5b5060085461024c9060ff1681565b604051901515815260200161018c565b34801561026857600080fd5b5061014f610277366004611084565b6108b2565b34801561028857600080fd5b5061014f610917565b34801561029d57600080fd5b5061024c6102ac366004610f84565b6001600160a01b031660009081526003602052604090205460ff1690565b3480156102d657600080fd5b506000546040516001600160a01b03909116815260200161018c565b3480156102fe57600080fd5b5061030761094d565b60405161018c9190611192565b34801561032057600080fd5b5061014f61032f366004610f9f565b6109af565b34801561034057600080fd5b5061030761034f366004610fc9565b610a46565b34801561036057600080fd5b5061014f610ae2565b34801561037557600080fd5b5061018260095481565b34801561038b57600080fd5b5061014f61039a366004610f84565b610b20565b3480156103ab57600080fd5b5061014f6103ba366004610f84565b610c0d565b6000546001600160a01b031633146103f25760405162461bcd60e51b81526004016103e990611240565b60405180910390fd5b6009546103ff9082610ca5565b60095550565b6000546001600160a01b0316331461042f5760405162461bcd60e51b81526004016103e990611240565b6009546103ff9082610cb8565b3360009081526003602052604090205460ff1661049b5760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c79207369676e65722063616e2063616c6c2066756e6374696f6e00000060448201526064016103e9565b60085460ff16156104be5760405162461bcd60e51b81526004016103e990611277565b8260095410156105095760405162461bcd60e51b8152602060048201526016602482015275696e73756666696369656e7420616c6c6f77616e636560501b60448201526064016103e9565b600084848484604051602001610522949392919061113d565b60408051808303601f190181529181528151602092830120600081815260059093529120600481015491925090600160a01b900460ff16156105655750506106d4565b60005b81548110156105bc5781543390839083908110610587576105876113bf565b6000918252602090912001546001600160a01b031614156105aa575050506106d4565b806105b481611378565b915050610568565b506004810180546001600160a01b0319166001600160a01b0388161790556001810185905582516105f69060038301906020860190610e42565b50835161060c9060028301906020870190610e42565b5080546001810182556000828152602090200180546001600160a01b031916331790556002805461063d91906112b9565b815411156106d15760048101805460ff60a01b1916600160a01b1790556006546106679086610cb8565b6006556009546106779086610ca5565b600955600181015460048201546040516001600160a01b03909116907fbceab28ca952a9177ce3716580d6c8c2d677fdf721b944e57a5e7322622ffdc9906106c89060028601906003870190611212565b60405180910390a35b50505b50505050565b60085460ff16156106fd5760405162461bcd60e51b81526004016103e990611277565b6001543410156107385760405162461bcd60e51b8152602060048201526006602482015265119bdc989a5960d21b60448201526064016103e9565b600061075b61271061075560075434610cc490919063ffffffff16565b90610cd0565b905060006107693483610ca5565b6006549091506107799082610ca5565b6006556040518290829033907f62116a798bb58cc967874bea4d771de2f9aeec6c64189ff2e5a551072f3106f9906107b29088906111df565b60405180910390a4505050565b6000546001600160a01b031633146107e95760405162461bcd60e51b81526004016103e990611240565b60078054908290556040518290829033907f9e31cca092b9e764bfc6b1b552d55ad4b035e609318fecc26cd38b34e8dd08bb90600090a45050565b6000546001600160a01b0316331461084e5760405162461bcd60e51b81526004016103e990611240565b6001600160a01b03811660009081526003602052604090205460ff16156108af5761087881610cdc565b6040516001600160a01b0382169033907f013d6b862b532c38b01efed34c94d382085143963c63c76e87c24d4b7a37f98e90600090a35b50565b6000546001600160a01b031633146108dc5760405162461bcd60e51b81526004016103e990611240565b60018054908290556040518290829033907f480e8e496f7aff74972b0902e678fd5b564e4fb6527f0418da8a2c1aa628002290600090a45050565b6000546001600160a01b031633146109415760405162461bcd60e51b81526004016103e990611240565b61094b6000610df2565b565b606060028054806020026020016040519081016040528092919081815260200182805480156109a557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610987575b5050505050905090565b6000546001600160a01b031633146109d95760405162461bcd60e51b81526004016103e990611240565b60085460ff16156109fc5760405162461bcd60e51b81526004016103e990611277565b600654610a099082610ca5565b60065560405181906001600160a01b038416907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df790600090a35050565b6060600085858585604051602001610a61949392919061113d565b60408051601f1981840301815282825280516020918201206000818152600583528390208054808402860184019094528385529094509190830182828015610ad257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ab4575b5050505050915050949350505050565b6000546001600160a01b03163314610b0c5760405162461bcd60e51b81526004016103e990611240565b6008805460ff19811660ff90911615179055565b6000546001600160a01b03163314610b4a5760405162461bcd60e51b81526004016103e990611240565b6001600160a01b03811660009081526003602052604090205460ff166108af57600280546001600160a01b03831660008181526004602090815260408083209490945560039052828120805460ff19166001908117909155845490810185559381527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90930180546001600160a01b031916821790559051909133917f8064a302796c89446a96d63470b5b036212da26bd2debe5bec73e0170a9a5e839190a350565b6000546001600160a01b03163314610c375760405162461bcd60e51b81526004016103e990611240565b6001600160a01b038116610c9c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103e9565b6108af81610df2565b6000610cb182846112fa565b9392505050565b6000610cb182846112a1565b6000610cb182846112db565b6000610cb182846112b9565b6001600160a01b038116600090815260046020526040812054600254909190610d07906001906112fa565b9050808214610d8f57600060028281548110610d2557610d256113bf565b600091825260209091200154600280546001600160a01b039092169250829185908110610d5457610d546113bf565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559290911681526004909152604090208290555b6001600160a01b0383166000908152600360209081526040808320805460ff1916905560049091528120556002805480610dcb57610dcb6113a9565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054610e4e9061133d565b90600052602060002090601f016020900481019282610e705760008555610eb6565b82601f10610e8957805160ff1916838001178555610eb6565b82800160010185558215610eb6579182015b82811115610eb6578251825591602001919060010190610e9b565b50610ec2929150610ec6565b5090565b5b80821115610ec25760008155600101610ec7565b80356001600160a01b0381168114610ef257600080fd5b919050565b600082601f830112610f0857600080fd5b813567ffffffffffffffff80821115610f2357610f236113d5565b604051601f8301601f19908116603f01168101908282118183101715610f4b57610f4b6113d5565b81604052838152866020858801011115610f6457600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215610f9657600080fd5b610cb182610edb565b60008060408385031215610fb257600080fd5b610fbb83610edb565b946020939093013593505050565b60008060008060808587031215610fdf57600080fd5b610fe885610edb565b935060208501359250604085013567ffffffffffffffff8082111561100c57600080fd5b61101888838901610ef7565b9350606087013591508082111561102e57600080fd5b5061103b87828801610ef7565b91505092959194509250565b60006020828403121561105957600080fd5b813567ffffffffffffffff81111561107057600080fd5b61107c84828501610ef7565b949350505050565b60006020828403121561109657600080fd5b5035919050565b8054600090600181811c90808316806110b757607f831692505b60208084108214156110d957634e487b7160e01b600052602260045260246000fd5b838852602088018280156110f4576001811461110557611130565b60ff19871682528282019750611130565b60008981526020902060005b8781101561112a57815484820152908601908401611111565b83019850505b5050505050505092915050565b6bffffffffffffffffffffffff198560601b1681528360148201526000835161116d816034850160208801611311565b835190830190611184816034840160208801611311565b016034019695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156111d35783516001600160a01b0316835292840192918401916001016111ae565b50909695505050505050565b60208152600082518060208401526111fe816040850160208701611311565b601f01601f19169190910160400192915050565b604081526000611225604083018561109d565b8281036020840152611237818561109d565b95945050505050565b6020808252601c908201527f4f6e6c79206f776e65722063616e2063616c6c2066756e6374696f6e00000000604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b600082198211156112b4576112b4611393565b500190565b6000826112d657634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156112f5576112f5611393565b500290565b60008282101561130c5761130c611393565b500390565b60005b8381101561132c578181015183820152602001611314565b838111156106d45750506000910152565b600181811c9082168061135157607f821691505b6020821081141561137257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561138c5761138c611393565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212205b244481ec6aff2fd1940022fe1ab54dff4f36d72c704cbd60ef2cf781da910964736f6c63430008060033", + Code: DCBridgeContractDetroitByteCode, }, }, } @@ -158,11 +157,7 @@ func applySystemContractUpgrade(upgrade *Upgrade, blockNumber *big.Int, statedb } } - newContractCode, err := hex.DecodeString(cfg.Code) - if err != nil { - panic(fmt.Errorf("failed to decode new contract code: %s", err.Error())) - } - statedb.SetCode(cfg.ContractAddr, newContractCode) + statedb.SetCode(cfg.ContractAddr, cfg.Code) // Initialize system contract storage if necessary for k, v := range cfg.DefaultInitStorage {