for id, e := range entries {
var ord uint64
switch e := e.(type) {
+ case *bc.CrossChainInput:
+ ord = e.Ordinal
+ if *e.WitnessDestination.Value.AssetId == *consensus.BTMAssetID {
+ tx.GasInputIDs = append(tx.GasInputIDs, id)
+ }
+
case *bc.Spend:
ord = e.Ordinal
spentOutputIDs[*e.SpentOutputId] = true
var (
spends []*bc.Spend
+ crossIns []*bc.CrossChainInput
coinbase *bc.Coinbase
)
}
case *UnvoteInput:
- // create entry for prevout
prog := &bc.Program{VmVersion: inp.VMVersion, Code: inp.ControlProgram}
src := &bc.ValueSource{
Ref: &inp.SourceID,
}
spends = append(spends, spend)
+ case *CrossChainInput:
+ prog := &bc.Program{VmVersion: inp.VMVersion, Code: inp.ControlProgram}
+ src := &bc.ValueSource{
+ Ref: &inp.SourceID,
+ Value: &inp.AssetAmount,
+ Position: inp.SourcePosition,
+ }
+ prevout := bc.NewCrossChainOutput(src, prog, 0) // ordinal doesn't matter
+ outputID := bc.EntryID(prevout)
+ crossIn := bc.NewCrossChainInput(&outputID, &inp.AssetAmount, uint64(i))
+ crossIn.WitnessArguments = inp.Arguments
+ crossInID := addEntry(crossIn)
+ muxSources[i] = &bc.ValueSource{
+ Ref: &crossInID,
+ Value: &inp.AssetAmount,
+ }
+ crossIns = append(crossIns, crossIn)
+
}
}
spend.SetDestination(&muxID, spentOutput.Source.Value, spend.Ordinal)
}
+ for _, crossIn := range crossIns {
+ crossIn.SetDestination(&muxID, crossIn.Value, crossIn.Ordinal)
+ }
+
if coinbase != nil {
coinbase.SetDestination(&muxID, mux.Sources[0].Value, 0)
}