github.com/halybang/go-ethereum@v1.0.5-0.20180325041310-3b262bc1367c/core/vm/precompiled_contracts_addr.go (about)

     1  // Copyright 2018 Wanchain Foundation Ltd
     2  
     3  package vm
     4  
     5  import (
     6  	"github.com/wanchain/go-wanchain/common"
     7  	"github.com/wanchain/go-wanchain/core/types"
     8  	"math/big"
     9  )
    10  
    11  // Precompiled contracts address or
    12  // Reserved contracts address.
    13  // Should prevent overwriting to them.
    14  var (
    15  	ecrecoverPrecompileAddr      = common.BytesToAddress([]byte{1})
    16  	sha256hashPrecompileAddr     = common.BytesToAddress([]byte{2})
    17  	ripemd160hashPrecompileAddr  = common.BytesToAddress([]byte{3})
    18  	dataCopyPrecompileAddr       = common.BytesToAddress([]byte{4})
    19  	bigModExpPrecompileAddr      = common.BytesToAddress([]byte{5})
    20  	bn256AddPrecompileAddr       = common.BytesToAddress([]byte{6})
    21  	bn256ScalarMulPrecompileAddr = common.BytesToAddress([]byte{7})
    22  	bn256PairingPrecompileAddr   = common.BytesToAddress([]byte{8})
    23  
    24  	wanCoinPrecompileAddr  = common.BytesToAddress([]byte{100})
    25  	wanStampPrecompileAddr = common.BytesToAddress([]byte{200})
    26  
    27  	otaBalanceStorageAddr = common.BytesToAddress(big.NewInt(300).Bytes())
    28  	otaImageStorageAddr   = common.BytesToAddress(big.NewInt(301).Bytes())
    29  
    30  	// 0.01wan --> "0x0000000000000000000000010000000000000000"
    31  	otaBalancePercentdot001WStorageAddr = common.HexToAddress(WanStampdot001)
    32  	otaBalancePercentdot002WStorageAddr = common.HexToAddress(WanStampdot002)
    33  	otaBalancePercentdot005WStorageAddr = common.HexToAddress(WanStampdot005)
    34  	
    35  	otaBalancePercentdot003WStorageAddr = common.HexToAddress(WanStampdot003)
    36  	otaBalancePercentdot006WStorageAddr = common.HexToAddress(WanStampdot006)
    37  	otaBalancePercentdot009WStorageAddr = common.HexToAddress(WanStampdot009)
    38  
    39  	otaBalancePercentdot03WStorageAddr = common.HexToAddress(WanStampdot03)
    40  	otaBalancePercentdot06WStorageAddr = common.HexToAddress(WanStampdot06)
    41  	otaBalancePercentdot09WStorageAddr = common.HexToAddress(WanStampdot09)
    42  	otaBalancePercentdot2WStorageAddr = common.HexToAddress(WanStampdot2)
    43  	otaBalancePercentdot5WStorageAddr = common.HexToAddress(WanStampdot5)
    44  
    45  	otaBalance10WStorageAddr       = common.HexToAddress(Wancoin10)
    46  	otaBalance20WStorageAddr       = common.HexToAddress(Wancoin20)
    47  	otaBalance50WStorageAddr       = common.HexToAddress(Wancoin50)
    48  	otaBalance100WStorageAddr      = common.HexToAddress(Wancoin100)
    49  
    50  	otaBalance200WStorageAddr       = common.HexToAddress(Wancoin200)
    51  	otaBalance500WStorageAddr       = common.HexToAddress(Wancoin500)
    52  	otaBalance1000WStorageAddr      = common.HexToAddress(Wancoin1000)
    53  	otaBalance5000WStorageAddr      = common.HexToAddress(Wancoin5000)
    54  	otaBalance50000WStorageAddr     = common.HexToAddress(Wancoin50000)
    55  )
    56  
    57  // PrecompiledContract is the basic interface for native Go contracts. The implementation
    58  // requires a deterministic gas count based on the input size of the Run method of the
    59  // contract.
    60  type PrecompiledContract interface {
    61  	RequiredGas(input []byte) uint64                                // RequiredPrice calculates the contract gas use
    62  	Run(input []byte, contract *Contract, evm *EVM) ([]byte, error) // Run runs the precompiled contract
    63  	ValidTx(stateDB StateDB, signer types.Signer, tx *types.Transaction) error
    64  }
    65  
    66  // PrecompiledContractsHomestead contains the default set of pre-compiled Ethereum
    67  // contracts used in the Frontier and Homestead releases.
    68  var PrecompiledContractsHomestead = map[common.Address]PrecompiledContract{
    69  	ecrecoverPrecompileAddr:     &ecrecover{},
    70  	sha256hashPrecompileAddr:    &sha256hash{},
    71  	ripemd160hashPrecompileAddr: &ripemd160hash{},
    72  	dataCopyPrecompileAddr:      &dataCopy{},
    73  
    74  	wanCoinPrecompileAddr:  &wanCoinSC{},
    75  	wanStampPrecompileAddr: &wanchainStampSC{},
    76  }
    77  
    78  // PrecompiledContractsByzantium contains the default set of pre-compiled Ethereum
    79  // contracts used in the Byzantium release.
    80  var PrecompiledContractsByzantium = map[common.Address]PrecompiledContract{
    81  	ecrecoverPrecompileAddr:      &ecrecover{},
    82  	sha256hashPrecompileAddr:     &sha256hash{},
    83  	ripemd160hashPrecompileAddr:  &ripemd160hash{},
    84  	dataCopyPrecompileAddr:       &dataCopy{},
    85  	bigModExpPrecompileAddr:      &bigModExp{},
    86  	bn256AddPrecompileAddr:       &bn256Add{},
    87  	bn256ScalarMulPrecompileAddr: &bn256ScalarMul{},
    88  	bn256PairingPrecompileAddr:   &bn256Pairing{},
    89  
    90  	wanCoinPrecompileAddr:  &wanCoinSC{},
    91  	wanStampPrecompileAddr: &wanchainStampSC{},
    92  }