OSDN Git Service

Revert "remove CtrlProgram#Change and accountOutput#change (#600)"
authorYongfeng LI <wliyongfeng@gmail.com>
Sat, 14 Apr 2018 05:48:02 +0000 (13:48 +0800)
committerYongfeng LI <wliyongfeng@gmail.com>
Sat, 14 Apr 2018 05:48:02 +0000 (13:48 +0800)
This reverts commit 6baed9deec77c8267b80412efdefd411e3f98fb5.

account/accounts.go
account/builder.go
account/reserve_test.go
api/receivers.go
test/integration/standard_transaction_test.go
test/tx_test_util.go
test/wallet_test_util.go
wallet/indexer.go
wallet/wallet.go
wallet/wallet_test.go

index f6b29c5..272d2c6 100644 (file)
@@ -263,20 +263,20 @@ func (m *Manager) GetAliasByID(id string) string {
 }
 
 // CreateAddress generate an address for the select account
-func (m *Manager) CreateAddress(ctx context.Context, accountID string) (cp *CtrlProgram, err error) {
+func (m *Manager) CreateAddress(ctx context.Context, accountID string, change bool) (cp *CtrlProgram, err error) {
        account, err := m.findByID(ctx, accountID)
        if err != nil {
                return nil, err
        }
-       return m.createAddress(ctx, account)
+       return m.createAddress(ctx, account, change)
 }
 
 // CreateAddress generate an address for the select account
-func (m *Manager) createAddress(ctx context.Context, account *Account) (cp *CtrlProgram, err error) {
+func (m *Manager) createAddress(ctx context.Context, account *Account, change bool) (cp *CtrlProgram, err error) {
        if len(account.XPubs) == 1 {
-               cp, err = m.createP2PKH(ctx, account)
+               cp, err = m.createP2PKH(ctx, account, change)
        } else {
-               cp, err = m.createP2SH(ctx, account)
+               cp, err = m.createP2SH(ctx, account, change)
        }
        if err != nil {
                return nil, err
@@ -288,7 +288,7 @@ func (m *Manager) createAddress(ctx context.Context, account *Account) (cp *Ctrl
        return cp, nil
 }
 
-func (m *Manager) createP2PKH(ctx context.Context, account *Account) (*CtrlProgram, error) {
+func (m *Manager) createP2PKH(ctx context.Context, account *Account, change bool) (*CtrlProgram, error) {
        idx := m.getNextXpubsIndex(account.Signer.XPubs)
        path := signers.Path(account.Signer, signers.AccountKeySpace, idx)
        derivedXPubs := chainkd.DeriveXPubs(account.XPubs, path)
@@ -311,10 +311,11 @@ func (m *Manager) createP2PKH(ctx context.Context, account *Account) (*CtrlProgr
                Address:        address.EncodeAddress(),
                KeyIndex:       idx,
                ControlProgram: control,
+               Change:         change,
        }, nil
 }
 
-func (m *Manager) createP2SH(ctx context.Context, account *Account) (*CtrlProgram, error) {
+func (m *Manager) createP2SH(ctx context.Context, account *Account, change bool) (*CtrlProgram, error) {
        idx := m.getNextXpubsIndex(account.Signer.XPubs)
        path := signers.Path(account.Signer, signers.AccountKeySpace, idx)
        derivedXPubs := chainkd.DeriveXPubs(account.XPubs, path)
@@ -341,6 +342,7 @@ func (m *Manager) createP2SH(ctx context.Context, account *Account) (*CtrlProgra
                Address:        address.EncodeAddress(),
                KeyIndex:       idx,
                ControlProgram: control,
+               Change:         change,
        }, nil
 }
 
@@ -350,6 +352,7 @@ type CtrlProgram struct {
        Address        string
        KeyIndex       uint64
        ControlProgram []byte
+       Change         bool
 }
 
 func (m *Manager) insertAccountControlProgram(ctx context.Context, progs ...*CtrlProgram) error {
@@ -393,7 +396,7 @@ func (m *Manager) GetCoinbaseControlProgram() ([]byte, error) {
                return nil, err
        }
 
-       program, err := m.createAddress(nil, account)
+       program, err := m.createAddress(nil, account, false)
        if err != nil {
                return nil, err
        }
index 850e52b..5a175a6 100644 (file)
@@ -72,7 +72,7 @@ func (a *spendAction) Build(ctx context.Context, b *txbuilder.TemplateBuilder) e
        }
 
        if res.Change > 0 {
-               acp, err := a.accounts.CreateAddress(ctx, a.AccountID)
+               acp, err := a.accounts.CreateAddress(ctx, a.AccountID, true)
                if err != nil {
                        return errors.Wrap(err, "creating control program")
                }
index 3a130bf..9905989 100644 (file)
@@ -51,7 +51,7 @@ func TestCancelReservation(t *testing.T) {
                t.Fatal(err)
        }
 
-       controlProg, err := accountManager.CreateAddress(nil, testAccount.ID)
+       controlProg, err := accountManager.CreateAddress(nil, testAccount.ID, false)
        if err != nil {
                t.Fatal(err)
        }
index a3a2285..a7dfcab 100644 (file)
@@ -20,7 +20,7 @@ func (a *API) createAccountReceiver(ctx context.Context, ins struct {
                accountID = account.ID
        }
 
-       program, err := a.wallet.AccountMgr.CreateAddress(ctx, accountID)
+       program, err := a.wallet.AccountMgr.CreateAddress(ctx, accountID, false)
        if err != nil {
                return NewErrorResponse(err)
        }
index bc98e00..25e195f 100644 (file)
@@ -46,7 +46,7 @@ func TestP2PKH(t *testing.T) {
                t.Fatal(err)
        }
 
-       controlProg, err := accountManager.CreateAddress(nil, testAccount.ID)
+       controlProg, err := accountManager.CreateAddress(nil, testAccount.ID, false)
        if err != nil {
                t.Fatal(err)
        }
@@ -103,7 +103,7 @@ func TestP2SH(t *testing.T) {
                t.Fatal(err)
        }
 
-       controlProg, err := accountManager.CreateAddress(nil, testAccount.ID)
+       controlProg, err := accountManager.CreateAddress(nil, testAccount.ID, false)
        if err != nil {
                t.Fatal(err)
        }
@@ -160,7 +160,7 @@ func TestMutilNodeSign(t *testing.T) {
                t.Fatal(err)
        }
 
-       controlProg, err := accountManager.CreateAddress(nil, testAccount.ID)
+       controlProg, err := accountManager.CreateAddress(nil, testAccount.ID, false)
        if err != nil {
                t.Fatal(err)
        }
index 4710d23..4444a9d 100644 (file)
@@ -84,7 +84,7 @@ func (g *TxGenerator) createAsset(accountAlias string, assetAlias string) (*asse
 }
 
 func (g *TxGenerator) mockUtxo(accountAlias, assetAlias string, amount uint64) (*account.UTXO, error) {
-       ctrlProg, err := g.createControlProgram(accountAlias)
+       ctrlProg, err := g.createControlProgram(accountAlias, false)
        if err != nil {
                return nil, err
        }
@@ -127,12 +127,12 @@ func (g *TxGenerator) assetAmount(assetAlias string, amount uint64) (*bc.AssetAm
        }, nil
 }
 
-func (g *TxGenerator) createControlProgram(accountAlias string) (*account.CtrlProgram, error) {
+func (g *TxGenerator) createControlProgram(accountAlias string, change bool) (*account.CtrlProgram, error) {
        acc, err := g.AccountManager.FindByAlias(nil, accountAlias)
        if err != nil {
                return nil, err
        }
-       return g.AccountManager.CreateAddress(nil, acc.ID)
+       return g.AccountManager.CreateAddress(nil, acc.ID, change)
 }
 
 // AddSpendInput add a spend input
@@ -208,7 +208,7 @@ func (g *TxGenerator) AddTxOutput(accountAlias, assetAlias string, amount uint64
        if err != nil {
                return err
        }
-       controlProgram, err := g.createControlProgram(accountAlias)
+       controlProgram, err := g.createControlProgram(accountAlias, false)
        if err != nil {
                return err
        }
index 95929eb..910dc50 100644 (file)
@@ -127,13 +127,13 @@ type walletTestContext struct {
        Chain  *protocol.Chain
 }
 
-func (ctx *walletTestContext) createControlProgram(accountName string) (*account.CtrlProgram, error) {
+func (ctx *walletTestContext) createControlProgram(accountName string, change bool) (*account.CtrlProgram, error) {
        acc, err := ctx.Wallet.AccountMgr.FindByAlias(nil, accountName)
        if err != nil {
                return nil, err
        }
 
-       return ctx.Wallet.AccountMgr.CreateAddress(nil, acc.ID)
+       return ctx.Wallet.AccountMgr.CreateAddress(nil, acc.ID, change)
 }
 
 func (ctx *walletTestContext) getPubkey(keyAlias string) *chainkd.XPub {
@@ -155,7 +155,7 @@ func (ctx *walletTestContext) createAsset(accountAlias string, assetAlias string
 }
 
 func (ctx *walletTestContext) newBlock(txs []*types.Tx, coinbaseAccount string) (*types.Block, error) {
-       controlProgram, err := ctx.createControlProgram(coinbaseAccount)
+       controlProgram, err := ctx.createControlProgram(coinbaseAccount, true)
        if err != nil {
                return nil, err
        }
index 9388402..5f8b9df 100644 (file)
@@ -36,6 +36,7 @@ type accountOutput struct {
        AccountID string
        Address   string
        keyIndex  uint64
+       change    bool
 }
 
 const (
@@ -298,6 +299,7 @@ func loadAccountInfo(outs []*rawOutput, w *Wallet) []*accountOutput {
                        for _, out := range outsByScript[s] {
                                newOut := &accountOutput{
                                        rawOutput: *out,
+                                       change:    false,
                                }
                                result = append(result, newOut)
                        }
@@ -327,6 +329,7 @@ func loadAccountInfo(outs []*rawOutput, w *Wallet) []*accountOutput {
                                AccountID: cp.AccountID,
                                Address:   cp.Address,
                                keyIndex:  cp.KeyIndex,
+                               change:    cp.Change,
                        }
                        result = append(result, newOut)
                }
index ae97254..fce7f9d 100644 (file)
@@ -307,7 +307,7 @@ func (w *Wallet) recoveryAccountWalletDB(account *account.Account, XPub *pseudoh
 
 func (w *Wallet) createProgram(account *account.Account, XPub *pseudohsm.XPub, index uint64) error {
        for i := uint64(0); i < index; i++ {
-               if _, err := w.AccountMgr.CreateAddress(nil, account.ID); err != nil {
+               if _, err := w.AccountMgr.CreateAddress(nil, account.ID, false); err != nil {
                        return err
                }
        }
index 53ce308..8a6d218 100644 (file)
@@ -57,7 +57,7 @@ func TestWalletUpdate(t *testing.T) {
                t.Fatal(err)
        }
 
-       controlProg, err := accountManager.CreateAddress(nil, testAccount.ID)
+       controlProg, err := accountManager.CreateAddress(nil, testAccount.ID, false)
        if err != nil {
                t.Fatal(err)
        }