"fmt"
"time"
- "github.com/tendermint/tmlibs/db"
-
"github.com/bytom/account"
"github.com/bytom/asset"
"github.com/bytom/blockchain/pseudohsm"
"github.com/bytom/consensus"
"github.com/bytom/crypto/ed25519/chainkd"
"github.com/bytom/crypto/sha3pool"
+ dbm "github.com/bytom/database/leveldb"
"github.com/bytom/errors"
"github.com/bytom/protocol/bc"
"github.com/bytom/protocol/bc/types"
}
func (g *TxGenerator) createKey(alias string, auth string) error {
- _, err := g.Hsm.XCreate(alias, auth)
+ _, _, err := g.Hsm.XCreate(alias, auth, "en")
return err
}
}
xpubs = append(xpubs, *xpub)
}
- _, err := g.AccountManager.Create(nil, xpubs, quorum, name, nil)
+ _, err := g.AccountManager.Create(xpubs, quorum, name, signers.BIP0044)
return err
}
func (g *TxGenerator) createAsset(accountAlias string, assetAlias string) (*asset.Asset, error) {
- acc, err := g.AccountManager.FindByAlias(nil, accountAlias)
+ acc, err := g.AccountManager.FindByAlias(accountAlias)
if err != nil {
return nil, err
}
- return g.Assets.Define(acc.XPubs, len(acc.XPubs), nil, assetAlias, nil)
+ return g.Assets.Define(acc.XPubs, len(acc.XPubs), nil, 0, assetAlias, nil)
}
func (g *TxGenerator) mockUtxo(accountAlias, assetAlias string, amount uint64) (*account.UTXO, error) {
AccountID: ctrlProg.AccountID,
Address: ctrlProg.Address,
ValidHeight: 0,
+ Change: ctrlProg.Change,
}
return utxo, nil
}
return a, nil
}
- asset, err := g.Assets.FindByAlias(nil, assetAlias)
+ asset, err := g.Assets.FindByAlias(assetAlias)
if err != nil {
return nil, err
}
}
func (g *TxGenerator) createControlProgram(accountAlias string, change bool) (*account.CtrlProgram, error) {
- acc, err := g.AccountManager.FindByAlias(nil, accountAlias)
+ acc, err := g.AccountManager.FindByAlias(accountAlias)
if err != nil {
return nil, err
}
- return g.AccountManager.CreateAddress(nil, acc.ID, change)
+ return g.AccountManager.CreateAddress(acc.ID, change)
}
// AddSpendInput add a spend input
return err
}
- acc, err := g.AccountManager.FindByAlias(nil, accountAlias)
+ acc, err := g.AccountManager.FindByAlias(accountAlias)
if err != nil {
return err
}
// AddTxInputFromUtxo add a tx input which spent the utxo
func (g *TxGenerator) AddTxInputFromUtxo(utxo *account.UTXO, accountAlias string) error {
- acc, err := g.AccountManager.FindByAlias(nil, accountAlias)
+ acc, err := g.AccountManager.FindByAlias(accountAlias)
if err != nil {
return err
}
// AddIssuanceInput add a issue input
func (g *TxGenerator) AddIssuanceInput(assetAlias string, amount uint64) error {
- asset, err := g.Assets.FindByAlias(nil, assetAlias)
+ asset, err := g.Assets.FindByAlias(assetAlias)
if err != nil {
return err
}
}
issuanceInput := types.NewIssuanceInput(nonce[:], amount, asset.IssuanceProgram, nil, asset.RawDefinitionByte)
signInstruction := &txbuilder.SigningInstruction{}
- path := signers.Path(asset.Signer, signers.AssetKeySpace)
+ path := signers.GetBip0032Path(asset.Signer, signers.AssetKeySpace)
signInstruction.AddRawWitnessKeys(asset.Signer.XPubs, path, asset.Signer.Quorum)
g.Builder.RestrictMinTime(time.Now())
return g.Builder.AddInput(issuanceInput, signInstruction)
}
// SignInstructionFor read CtrlProgram from db, construct SignInstruction for SpendInput
-func SignInstructionFor(input *types.SpendInput, db db.DB, signer *signers.Signer) (*txbuilder.SigningInstruction, error) {
+func SignInstructionFor(input *types.SpendInput, db dbm.DB, signer *signers.Signer) (*txbuilder.SigningInstruction, error) {
cp := account.CtrlProgram{}
var hash [32]byte
sha3pool.Sum256(hash[:], input.ControlProgram)
- bytes := db.Get(account.CPKey(hash))
+ bytes := db.Get(account.ContractKey(hash))
if bytes == nil {
return nil, fmt.Errorf("can't find CtrlProgram for the SpendInput")
}
}
// FIXME: code duplicate with account/builder.go
- path := signers.Path(signer, signers.AccountKeySpace, cp.KeyIndex)
+ path, err := signers.Path(signer, signers.AccountKeySpace, cp.Change, cp.KeyIndex)
+ if err != nil {
+ return nil, err
+ }
+
if cp.Address == "" {
sigInst.AddWitnessKeys(signer.XPubs, path, signer.Quorum)
return sigInst, nil
case *common.AddressWitnessScriptHash:
sigInst.AddRawWitnessKeys(signer.XPubs, path, signer.Quorum)
- path := signers.Path(signer, signers.AccountKeySpace, cp.KeyIndex)
+ path, err := signers.Path(signer, signers.AccountKeySpace, cp.Change, cp.KeyIndex)
+ if err != nil {
+ return nil, err
+ }
derivedXPubs := chainkd.DeriveXPubs(signer.XPubs, path)
derivedPKs := chainkd.XPubKeys(derivedXPubs)
script, err := vmutil.P2SPMultiSigProgram(derivedPKs, signer.Quorum)
}
output := types.NewTxOutput(*consensus.BTMAssetID, outputAmount, ctrlProgram)
builder := txbuilder.NewBuilder(time.Now())
- builder.AddInput(txInput, &txbuilder.SigningInstruction{})
- builder.AddOutput(output)
+ if err := builder.AddInput(txInput, &txbuilder.SigningInstruction{}); err != nil {
+ return nil, err
+ }
+ if err := builder.AddOutput(output); err != nil {
+ return nil, err
+ }
tpl, _, err := builder.Build()
if err != nil {