package account
import (
- "encoding/hex"
"encoding/json"
"reflect"
"sort"
"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"
"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"
// HardenedKeyStart bip32 hierarchical deterministic wallets
// keys with index ≥ 0x80000000 are hardened keys
HardenedKeyStart = 0x80000000
+ logModule = "account"
)
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
m.db.Delete(ContractKey(hash))
}
}
+ m.db.Delete(bip44ContractIndexKey(accountID, false))
+ m.db.Delete(bip44ContractIndexKey(accountID, true))
+ m.db.Delete(contractIndexKey(accountID))
return nil
}
}
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
-}