}
func (m *Manager) createP2PKH(ctx context.Context, account *Account, change bool, expiresAt time.Time) (*CtrlProgram, error) {
- idx, err := m.nextIndex(ctx)
- if err != nil {
- return nil, err
- }
+ idx := m.nextIndex()
path := signers.Path(account.Signer, signers.AccountKeySpace, idx)
derivedXPubs := chainkd.DeriveXPubs(account.XPubs, path)
derivedPK := derivedXPubs[0].PublicKey()
}
func (m *Manager) createP2SH(ctx context.Context, account *Account, change bool, expiresAt time.Time) (*CtrlProgram, error) {
- idx, err := m.nextIndex(ctx)
- if err != nil {
- return nil, err
- }
-
+ idx := m.nextIndex()
path := signers.Path(account.Signer, signers.AccountKeySpace, idx)
derivedXPubs := chainkd.DeriveXPubs(account.XPubs, path)
derivedPKs := chainkd.XPubKeys(derivedXPubs)
return nil, err
}
- idx, err := m.nextIndex(ctx)
- if err != nil {
- return nil, err
- }
-
+ idx := m.nextIndex()
path := signers.Path(account.Signer, signers.AccountKeySpace, idx)
derivedXPubs := chainkd.DeriveXPubs(account.XPubs, path)
derivedPKs := chainkd.XPubKeys(derivedXPubs)
}
ctx := context.Background()
- idx, err := m.nextIndex(ctx)
- if err != nil {
- log.Errorf("GetCoinbaseControlProgram: fail to get nextIndex %v", err)
- return vmutil.CoinbaseProgram(nil, 0, height)
- }
+ idx := m.nextIndex()
path := signers.Path(account.Signer, signers.AccountKeySpace, idx)
derivedXPubs := chainkd.DeriveXPubs(account.XPubs, path)
derivedPKs := chainkd.XPubKeys(derivedXPubs)
return script, nil
}
-func saveIndex(db dbm.DB, index uint64) {
- buf := make([]byte, 8)
- binary.LittleEndian.PutUint64(buf, index)
- db.Set([]byte(keyNextIndex), buf)
-}
-
-func (m *Manager) nextIndex(ctx context.Context) (uint64, error) {
+func (m *Manager) nextIndex() uint64 {
m.acpMu.Lock()
defer m.acpMu.Unlock()
n := m.acpIndexNext
m.acpIndexNext++
- saveIndex(m.db, m.acpIndexNext)
- return n, nil
+ buf := make([]byte, 8)
+ binary.LittleEndian.PutUint64(buf, m.acpIndexNext)
+ m.db.Set([]byte(keyNextIndex), buf)
+ return n
}
// DeleteAccount deletes the account's ID or alias matching accountInfo.
func (m *Manager) DeleteAccount(in struct {
AccountInfo string `json:"account_info"`
-}) error {
-
- account := Account{}
- storeBatch := m.db.NewBatch()
-
- accountID := in.AccountInfo
- if s, err := m.FindByAlias(nil, in.AccountInfo); err == nil {
- accountID = s.ID
- }
-
- rawAccount := m.db.Get(Key(accountID))
- if rawAccount == nil {
- return nil
- }
- if err := json.Unmarshal(rawAccount, &account); err != nil {
- return err
+}) (err error) {
+ account := &Account{}
+ if account, err = m.FindByAlias(nil, in.AccountInfo); err != nil {
+ if account, err = m.findByID(nil, in.AccountInfo); err != nil {
+ return err
+ }
}
+ storeBatch := m.db.NewBatch()
storeBatch.Delete(aliasKey(account.Alias))
storeBatch.Delete(Key(account.ID))
storeBatch.Write()
-
return nil
}