numResults = uint64(len(tx.ResultIds))
entryID = bc.EntryID(entry) // TODO(bobg): pass this in, don't recompute it
- assetID *[]byte
+ assetID *bc.AssetID
+ assetIDBytes *[]byte
amount *uint64
destPos *uint64
spentOutputID *[]byte
switch e := entry.(type) {
case *bc.CrossChainInput:
mainchainOutput := tx.Entries[*e.MainchainOutputId].(*bc.IntraChainOutput)
- a1 := mainchainOutput.Source.Value.AssetId.Bytes()
- assetID = &a1
+ assetID = mainchainOutput.Source.Value.AssetId
+ a1 := assetID.Bytes()
+ assetIDBytes = &a1
amount = &mainchainOutput.Source.Value.Amount
destPos = &e.WitnessDestination.Position
s := e.MainchainOutputId.Bytes()
case *bc.Spend:
spentOutput := tx.Entries[*e.SpentOutputId].(*bc.IntraChainOutput)
- a1 := spentOutput.Source.Value.AssetId.Bytes()
- assetID = &a1
+ assetID = spentOutput.Source.Value.AssetId
+ a1 := assetID.Bytes()
+ assetIDBytes = &a1
amount = &spentOutput.Source.Value.Amount
destPos = &e.WitnessDestination.Position
s := e.SpentOutputId.Bytes()
case *bc.VetoInput:
voteOutput := tx.Entries[*e.SpentOutputId].(*bc.VoteOutput)
- a1 := voteOutput.Source.Value.AssetId.Bytes()
- assetID = &a1
+ assetID = voteOutput.Source.Value.AssetId
+ a1 := assetID.Bytes()
+ assetIDBytes = &a1
amount = &voteOutput.Source.Value.Amount
destPos = &e.WitnessDestination.Position
s := e.SpentOutputId.Bytes()
entries: tx.Entries,
}
- AssetIDBytes := [32]byte{}
- copy(AssetIDBytes[:], (*assetID)[:])
result := &vm.Context{
VMVersion: prog.VmVersion,
- Code: witnessProgram(prog.Code, bc.NewAssetID(AssetIDBytes)),
+ Code: witnessProgram(prog.Code, *assetID),
Arguments: args,
EntryID: entryID.Bytes(),
TxSigHash: txSigHashFn,
NumResults: &numResults,
- AssetID: assetID,
+ AssetID: assetIDBytes,
Amount: amount,
DestPos: destPos,
SpentOutputID: spentOutputID,
return result
}
-func witnessProgram(prog []byte, assetID bc.AssetID) []byte {
+func witnessProgram(prog []byte, lockedAssetID bc.AssetID) []byte {
if segwit.IsP2WPKHScript(prog) {
if witnessProg, err := segwit.ConvertP2PKHSigProgram(prog); err == nil {
return witnessProg
return witnessProg
}
} else if segwit.IsP2WDCScript(prog) {
- if witnessProg, err := segwit.ConvertP2DCProgram(prog, assetID); err == nil {
+ if witnessProg, err := segwit.ConvertP2DCProgram(prog, lockedAssetID); err == nil {
return witnessProg
}
}
}
// P2WDCProgram return the segwit pay to dex contract
-func P2WDCProgram(dexContractArgs DexContractArgs, lockedAssetID bc.AssetID) ([]byte, error) {
+func P2WDCProgram(dexContractArgs DexContractArgs) ([]byte, error) {
builder := NewBuilder()
builder.AddInt64(0)
builder.AddData(dexContractArgs.RequestedAsset.Bytes())
// P2DCProgram generates the script for control with dex contract
func P2DCProgram(dexContractArgs DexContractArgs, lockedAssetID bc.AssetID) ([]byte, error) {
- standardProgram, err := P2WDCProgram(dexContractArgs, lockedAssetID)
+ standardProgram, err := P2WDCProgram(dexContractArgs)
if err != nil {
return nil, err
}