"sync"
"github.com/golang/groupcache/lru"
- dbm "github.com/tendermint/tmlibs/db"
"golang.org/x/crypto/sha3"
- "github.com/bytom/blockchain/signers"
- "github.com/bytom/common"
- "github.com/bytom/consensus"
- "github.com/bytom/crypto/ed25519"
- "github.com/bytom/crypto/ed25519/chainkd"
- chainjson "github.com/bytom/encoding/json"
- "github.com/bytom/errors"
- "github.com/bytom/protocol"
- "github.com/bytom/protocol/bc"
- "github.com/bytom/protocol/vm/vmutil"
+ "github.com/bytom/bytom/blockchain/signers"
+ "github.com/bytom/bytom/common"
+ "github.com/bytom/bytom/consensus"
+ "github.com/bytom/bytom/crypto/ed25519"
+ "github.com/bytom/bytom/crypto/ed25519/chainkd"
+ dbm "github.com/bytom/bytom/database/leveldb"
+ chainjson "github.com/bytom/bytom/encoding/json"
+ "github.com/bytom/bytom/errors"
+ "github.com/bytom/bytom/protocol"
+ "github.com/bytom/bytom/protocol/bc"
+ "github.com/bytom/bytom/protocol/vm/vmutil"
)
// DefaultNativeAsset native BTM asset
}
// Define defines a new Asset.
-func (reg *Registry) Define(xpubs []chainkd.XPub, quorum int, definition map[string]interface{}, alias string, issuanceProgram chainjson.HexBytes) (*Asset, error) {
+func (reg *Registry) Define(xpubs []chainkd.XPub, quorum int, definition map[string]interface{}, limitHeight int64, alias string, issuanceProgram chainjson.HexBytes) (*Asset, error) {
var err error
var assetSigner *signers.Signer
path := signers.GetBip0032Path(assetSigner, signers.AssetKeySpace)
derivedXPubs := chainkd.DeriveXPubs(assetSigner.XPubs, path)
derivedPKs := chainkd.XPubKeys(derivedXPubs)
- issuanceProgram, vmver, err = multisigIssuanceProgram(derivedPKs, assetSigner.Quorum)
+ issuanceProgram, vmver, err = multisigIssuanceProgram(derivedPKs, assetSigner.Quorum, limitHeight)
if err != nil {
return nil, err
}
if err := json.Unmarshal(extAsset, &definitionMap); err != nil {
return nil, err
}
+ alias := assetID.String()
+ asset.Alias = &alias
asset.AssetID = assetID
asset.DefinitionMap = definitionMap
return asset, nil
return json.MarshalIndent(def, "", " ")
}
-func multisigIssuanceProgram(pubkeys []ed25519.PublicKey, nrequired int) (program []byte, vmversion uint64, err error) {
- issuanceProg, err := vmutil.P2SPMultiSigProgram(pubkeys, nrequired)
+func multisigIssuanceProgram(pubkeys []ed25519.PublicKey, nrequired int, blockHeight int64) (program []byte, vmversion uint64, err error) {
+ issuanceProg, err := vmutil.P2SPMultiSigProgramWithHeight(pubkeys, nrequired, blockHeight)
if err != nil {
return nil, 0, err
}