@@ -968,45 +968,10 @@ func (s *Service) buildCreateNFTAsset(args *CreateNFTAssetArgs) (*txs.Tx, ids.Sh
968
968
969
969
codec := s .vm .parser .Codec ()
970
970
initialState .Sort (codec )
971
-
972
- return buildCreateNFTAsset (s .vm , args .Name , args .Symbol , args .MinterSets , utxos , kc , changeAddr )
973
- }
974
-
975
- func buildCreateNFTAsset (
976
- vm * VM ,
977
- name , symbol string ,
978
- minterSets []Owners ,
979
- utxos []* avax.UTXO ,
980
- kc * secp256k1fx.Keychain ,
981
- changeAddr ids.ShortID ,
982
- ) (* txs.Tx , ids.ShortID , error ) {
983
- initialState := & txs.InitialState {
984
- FxIndex : 1 , // TODO: Should lookup nftfx FxID
985
- Outs : make ([]verify.State , 0 , len (minterSets )),
986
- }
987
- for i , owner := range minterSets {
988
- minter := & nftfx.MintOutput {
989
- GroupID : uint32 (i ),
990
- OutputOwners : secp256k1fx.OutputOwners {
991
- Threshold : uint32 (owner .Threshold ),
992
- },
993
- }
994
- minterAddrsSet , err := avax .ParseServiceAddresses (vm , owner .Minters )
995
- if err != nil {
996
- return nil , ids .ShortEmpty , err
997
- }
998
- minter .Addrs = minterAddrsSet .List ()
999
- utils .Sort (minter .Addrs )
1000
- initialState .Outs = append (initialState .Outs , minter )
1001
- }
1002
-
1003
- codec := vm .parser .Codec ()
1004
- initialState .Sort (codec )
1005
-
1006
971
return buildCreateAssetTx (
1007
- vm ,
1008
- name ,
1009
- symbol ,
972
+ s . vm ,
973
+ args . Name ,
974
+ args . Symbol ,
1010
975
0 , // NFTs are non-fungible
1011
976
[]* txs.InitialState {initialState },
1012
977
utxos ,
@@ -1774,45 +1739,59 @@ func (s *Service) buildImport(args *ImportArgs) (*txs.Tx, error) {
1774
1739
return nil , fmt .Errorf ("problem retrieving user's atomic UTXOs: %w" , err )
1775
1740
}
1776
1741
1777
- amountsSpent , importInputs , importKeys , err := s .vm .SpendAll (atomicUTXOs , kc )
1742
+ return buildImportTx (s .vm , chainID , atomicUTXOs , to , utxos , kc )
1743
+ }
1744
+
1745
+ func buildImportTx (
1746
+ vm * VM ,
1747
+ sourceChain ids.ID ,
1748
+ atomicUTXOs []* avax.UTXO ,
1749
+ to ids.ShortID ,
1750
+ utxos []* avax.UTXO ,
1751
+ kc * secp256k1fx.Keychain ,
1752
+ ) (* txs.Tx , error ) {
1753
+ toBurn , importInputs , importKeys , err := vm .SpendAll (atomicUTXOs , kc )
1778
1754
if err != nil {
1779
1755
return nil , err
1780
1756
}
1781
1757
1782
1758
var (
1783
- chainTime = s . vm .state .GetTimestamp ()
1784
- feeCfg = s . vm .GetDynamicFeesConfig (chainTime )
1759
+ chainTime = vm .state .GetTimestamp ()
1760
+ feeCfg = vm .GetDynamicFeesConfig (chainTime )
1785
1761
feeMan = commonfees .NewManager (feeCfg .UnitFees )
1786
1762
feeCalc = & fees.Calculator {
1787
- IsEUpgradeActive : s . vm .IsEUpgradeActivated (chainTime ),
1788
- Config : & s . vm .Config ,
1763
+ IsEUpgradeActive : vm .IsEUpgradeActivated (chainTime ),
1764
+ Config : & vm .Config ,
1789
1765
FeeManager : feeMan ,
1790
1766
ConsumedUnitsCap : feeCfg .BlockUnitsCap ,
1791
- Codec : s . vm .parser .Codec (),
1767
+ Codec : vm .parser .Codec (),
1792
1768
}
1793
1769
)
1794
1770
1795
1771
uTx := & txs.ImportTx {
1796
1772
BaseTx : txs.BaseTx {BaseTx : avax.BaseTx {
1797
- NetworkID : s . vm .ctx .NetworkID ,
1798
- BlockchainID : s . vm .ctx .ChainID ,
1773
+ NetworkID : vm .ctx .NetworkID ,
1774
+ BlockchainID : vm .ctx .ChainID ,
1799
1775
}},
1800
- SourceChain : chainID ,
1776
+ SourceChain : sourceChain ,
1801
1777
ImportedIns : importInputs ,
1802
1778
}
1803
1779
if err := uTx .Visit (feeCalc ); err != nil {
1804
1780
return nil , err
1805
1781
}
1806
1782
1807
- if amountSpent := amountsSpent [s .vm .feeAssetID ]; amountSpent < feeCalc .Fee {
1808
- feeCalc .Fee -= amountSpent
1783
+ if importedAmt := toBurn [vm .feeAssetID ]; importedAmt < feeCalc .Fee {
1784
+ feeCalc .Fee -= importedAmt
1785
+ toBurn [vm .feeAssetID ] = 0
1786
+ } else {
1787
+ feeCalc .Fee = 0
1788
+ toBurn [vm .feeAssetID ] -= feeCalc .Fee
1809
1789
}
1810
- toSpend := make (map [ids.ID ]uint64 )
1811
- ins , outs , keys , err := s .vm .FinanceTx (
1790
+ ins , outs , keys , err := vm .FinanceTx (
1812
1791
utxos ,
1813
- s . vm .feeAssetID ,
1792
+ vm .feeAssetID ,
1814
1793
kc ,
1815
- toSpend ,
1794
+ toBurn ,
1816
1795
feeCalc ,
1817
1796
to ,
1818
1797
)
@@ -1824,7 +1803,7 @@ func (s *Service) buildImport(args *ImportArgs) (*txs.Tx, error) {
1824
1803
uTx .Ins = ins
1825
1804
uTx .Outs = outs
1826
1805
tx := & txs.Tx {Unsigned : uTx }
1827
- return tx , tx .SignSECP256K1Fx (s . vm .parser .Codec (), keys )
1806
+ return tx , tx .SignSECP256K1Fx (vm .parser .Codec (), keys )
1828
1807
}
1829
1808
1830
1809
// ExportArgs are arguments for passing into ExportAVA requests
0 commit comments