X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=account%2Faccounts.go;h=0526efe7c671bc5a460ade2c438bd1f01008c03f;hb=db01c294fbb586e39ef26cd07df8bceb8a0d207e;hp=fd76b5bf69020d6aee9a6b26c146aa09ef60d2bc;hpb=e58c4b1e2f0573318ffc699919599609ccf5da10;p=bytom%2Fvapor.git diff --git a/account/accounts.go b/account/accounts.go index fd76b5bf..0526efe7 100644 --- a/account/accounts.go +++ b/account/accounts.go @@ -2,7 +2,6 @@ package account import ( - "encoding/hex" "encoding/json" "reflect" "sort" @@ -11,7 +10,6 @@ import ( "github.com/golang/groupcache/lru" log "github.com/sirupsen/logrus" - dbm "github.com/tendermint/tmlibs/db" "github.com/vapor/blockchain/signers" "github.com/vapor/blockchain/txbuilder" @@ -21,7 +19,7 @@ import ( "github.com/vapor/crypto" "github.com/vapor/crypto/ed25519/chainkd" "github.com/vapor/crypto/sha3pool" - "github.com/vapor/equity/pegin_contract" + dbm "github.com/vapor/database/leveldb" "github.com/vapor/errors" "github.com/vapor/protocol" "github.com/vapor/protocol/bc" @@ -34,6 +32,7 @@ const ( // HardenedKeyStart bip32 hierarchical deterministic wallets // keys with index ≥ 0x80000000 are hardened keys HardenedKeyStart = 0x80000000 + logModule = "account" ) var ( @@ -48,16 +47,16 @@ var ( // pre-define errors for supporting bytom errorFormatter var ( - ErrDuplicateAlias = errors.New("duplicate account alias") - ErrDuplicateIndex = errors.New("duplicate account with same xPubs and index") - ErrFindAccount = errors.New("fail to find account") - ErrMarshalAccount = errors.New("failed marshal account") - ErrInvalidAddress = errors.New("invalid address") - ErrFindCtrlProgram = errors.New("fail to find account control program") - ErrDeriveRule = errors.New("invalid key derive rule") - ErrContractIndex = errors.New("exceed the maximum addresses per account") - ErrAccountIndex = errors.New("exceed the maximum accounts per xpub") - ErrFindTransaction = errors.New("no transaction") + ErrDuplicateAlias = errors.New("Duplicate account alias") + ErrDuplicateIndex = errors.New("Duplicate account with same xPubs and index") + ErrFindAccount = errors.New("Failed to find account") + ErrMarshalAccount = errors.New("Failed to marshal account") + ErrInvalidAddress = errors.New("Invalid address") + ErrFindCtrlProgram = errors.New("Failed to find account control program") + ErrDeriveRule = errors.New("Invalid key derivation rule") + ErrContractIndex = errors.New("Exceeded maximum addresses per account") + ErrAccountIndex = errors.New("Exceeded maximum accounts per xpub") + ErrFindTransaction = errors.New("No transaction") ) // ContractKey account control promgram store prefix @@ -316,6 +315,9 @@ func (m *Manager) deleteAccountControlPrograms(accountID string) error { m.db.Delete(ContractKey(hash)) } } + m.db.Delete(bip44ContractIndexKey(accountID, false)) + m.db.Delete(bip44ContractIndexKey(accountID, true)) + m.db.Delete(contractIndexKey(accountID)) return nil } @@ -787,105 +789,3 @@ func (m *Manager) SaveControlPrograms(progs ...*CtrlProgram) error { } return nil } - -func (m *Manager) CreatePeginAddress(accountID string, change bool) (string, []byte, error) { - // 通过配置获取 - claimCtrlProg, _ := m.CreateAddress(accountID, change) - claimScript := claimCtrlProg.ControlProgram - - federationRedeemScript := vmutil.CalculateContract(consensus.ActiveNetParams.FedpegXPubs, claimScript) - - scriptHash := crypto.Sha256(federationRedeemScript) - - address, err := common.NewPeginAddressWitnessScriptHash(scriptHash, &consensus.ActiveNetParams) - if err != nil { - return "", nil, err - } - - return address.EncodeAddress(), claimScript, nil - -} - -func (m *Manager) GetPeginControlPrograms(claimScript []byte) (string, []byte) { - federationRedeemScript := vmutil.CalculateContract(consensus.ActiveNetParams.FedpegXPubs, claimScript) - scriptHash := crypto.Sha256(federationRedeemScript) - - address, err := common.NewPeginAddressWitnessScriptHash(scriptHash, &consensus.ActiveNetParams) - if err != nil { - return "", nil - } - - redeemContract := address.ScriptAddress() - - program := []byte{} - program, err = vmutil.P2WSHProgram(redeemContract) - if err != nil { - return "", nil - } - - return address.EncodeAddress(), program -} - -func (m *Manager) CreatePeginContractPrograms(accountID string, change bool) (string, []byte, error) { - // 通过配置获取 - claimCtrlProg, err := m.CreateAddress(accountID, change) - if err != nil { - return "", nil, err - } - claimScript := claimCtrlProg.ControlProgram - - peginContractPrograms, err := pegin_contract.GetPeginContractPrograms(claimScript) - if err != nil { - return "", nil, err - } - return hex.EncodeToString(peginContractPrograms), claimScript, nil - -} - -func (m *Manager) CreatePeginContractAddress(accountID string, change bool) (string, []byte, error) { - // 通过配置获取 - claimCtrlProg, err := m.CreateAddress(accountID, change) - if err != nil { - return "", nil, err - } - claimScript := claimCtrlProg.ControlProgram - - peginContractPrograms, err := pegin_contract.GetPeginContractPrograms(claimScript) - if err != nil { - return "", nil, err - } - - scriptHash := crypto.Sha256(peginContractPrograms) - - address, err := common.NewPeginAddressWitnessScriptHash(scriptHash, &consensus.ActiveNetParams) - if err != nil { - return "", nil, err - } - - return address.EncodeAddress(), claimScript, nil - -} - -func (m *Manager) GetPeginContractControlPrograms(claimScript []byte) (string, []byte) { - - peginContractPrograms, err := pegin_contract.GetPeginContractPrograms(claimScript) - if err != nil { - return "", nil - } - scriptHash := crypto.Sha256(peginContractPrograms) - - address, err := common.NewPeginAddressWitnessScriptHash(scriptHash, &consensus.ActiveNetParams) - if err != nil { - return "", nil - } - - redeemContract := address.ScriptAddress() - - program := []byte{} - program, err = vmutil.P2WSHProgram(redeemContract) - if err != nil { - return "", nil - } - - return address.EncodeAddress(), program -}