From a4eeb2e713248de73f909640f48ea142a10e1216 Mon Sep 17 00:00:00 2001 From: Will Winder Date: Wed, 9 Nov 2022 12:57:38 -0500 Subject: [PATCH 1/5] Ignore no op asset transfers. --- accounting/eval_preload.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/accounting/eval_preload.go b/accounting/eval_preload.go index 35a8af74c..27973bff0 100644 --- a/accounting/eval_preload.go +++ b/accounting/eval_preload.go @@ -22,7 +22,12 @@ func addToCreatorsRequest(stxnad *transactions.SignedTxnWithAD, assetsReq map[ba } case protocol.AssetTransferTx: fields := &txn.AssetTransferTxnFields - if fields.XferAsset != 0 { + + noOpXfer := (fields.AssetAmount == 0) && + (txn.Sender != fields.AssetReceiver) && + (fields.AssetCloseTo != basics.Address{}) + + if fields.XferAsset == 0 && !noOpXfer { assetsReq[fields.XferAsset] = struct{}{} } case protocol.AssetFreezeTx: @@ -112,6 +117,14 @@ func addToAccountsResourcesRequest(stxnad *transactions.SignedTxnWithAD, assetCr } case protocol.AssetTransferTx: fields := &txn.AssetTransferTxnFields + + noOpXfer := (fields.AssetAmount == 0) && + (txn.Sender != fields.AssetReceiver) && + (fields.AssetCloseTo != basics.Address{}) + if noOpXfer { + break + } + creatable := ledger.Creatable{ Index: basics.CreatableIndex(fields.XferAsset), Type: basics.AssetCreatable, From 904a479e2ecec1f9e4a1acdc431b549cd165fda6 Mon Sep 17 00:00:00 2001 From: Will Winder Date: Wed, 9 Nov 2022 14:35:11 -0500 Subject: [PATCH 2/5] add clawback case. --- accounting/eval_preload.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/accounting/eval_preload.go b/accounting/eval_preload.go index 27973bff0..b8a4d86de 100644 --- a/accounting/eval_preload.go +++ b/accounting/eval_preload.go @@ -23,9 +23,9 @@ func addToCreatorsRequest(stxnad *transactions.SignedTxnWithAD, assetsReq map[ba case protocol.AssetTransferTx: fields := &txn.AssetTransferTxnFields - noOpXfer := (fields.AssetAmount == 0) && - (txn.Sender != fields.AssetReceiver) && - (fields.AssetCloseTo != basics.Address{}) + noOpXfer := (fields.AssetAmount == 0) && (txn.Sender != fields.AssetReceiver) && // optin + !fields.AssetCloseTo.IsZero() && // closeout + !fields.AssetSender.IsZero() // clawback if fields.XferAsset == 0 && !noOpXfer { assetsReq[fields.XferAsset] = struct{}{} @@ -118,9 +118,10 @@ func addToAccountsResourcesRequest(stxnad *transactions.SignedTxnWithAD, assetCr case protocol.AssetTransferTx: fields := &txn.AssetTransferTxnFields - noOpXfer := (fields.AssetAmount == 0) && - (txn.Sender != fields.AssetReceiver) && - (fields.AssetCloseTo != basics.Address{}) + noOpXfer := (fields.AssetAmount == 0) && (txn.Sender != fields.AssetReceiver) && // optin + !fields.AssetCloseTo.IsZero() && // closeout + !fields.AssetSender.IsZero() // clawback + if noOpXfer { break } From 3fec3dd4dd7d5ccb993b6d04b8fa786edec76caf Mon Sep 17 00:00:00 2001 From: Will Winder Date: Wed, 9 Nov 2022 15:07:59 -0500 Subject: [PATCH 3/5] fix xfer asset field. --- accounting/eval_preload.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/accounting/eval_preload.go b/accounting/eval_preload.go index b8a4d86de..14c99f89e 100644 --- a/accounting/eval_preload.go +++ b/accounting/eval_preload.go @@ -27,7 +27,7 @@ func addToCreatorsRequest(stxnad *transactions.SignedTxnWithAD, assetsReq map[ba !fields.AssetCloseTo.IsZero() && // closeout !fields.AssetSender.IsZero() // clawback - if fields.XferAsset == 0 && !noOpXfer { + if fields.XferAsset != 0 && !noOpXfer { assetsReq[fields.XferAsset] = struct{}{} } case protocol.AssetFreezeTx: From 96562b05d4bc2ea66ff237aaef591bfdb05764cf Mon Sep 17 00:00:00 2001 From: Will Winder Date: Thu, 10 Nov 2022 10:10:46 -0500 Subject: [PATCH 4/5] Fix backwards conditional. --- accounting/eval_preload.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/accounting/eval_preload.go b/accounting/eval_preload.go index 14c99f89e..56872f4c2 100644 --- a/accounting/eval_preload.go +++ b/accounting/eval_preload.go @@ -23,9 +23,9 @@ func addToCreatorsRequest(stxnad *transactions.SignedTxnWithAD, assetsReq map[ba case protocol.AssetTransferTx: fields := &txn.AssetTransferTxnFields - noOpXfer := (fields.AssetAmount == 0) && (txn.Sender != fields.AssetReceiver) && // optin - !fields.AssetCloseTo.IsZero() && // closeout - !fields.AssetSender.IsZero() // clawback + noOpXfer := (fields.AssetAmount == 0) && (txn.Sender != fields.AssetReceiver) && // not an optin + fields.AssetCloseTo.IsZero() && // not a closeout + fields.AssetSender.IsZero() // not a clawback if fields.XferAsset != 0 && !noOpXfer { assetsReq[fields.XferAsset] = struct{}{} @@ -118,9 +118,9 @@ func addToAccountsResourcesRequest(stxnad *transactions.SignedTxnWithAD, assetCr case protocol.AssetTransferTx: fields := &txn.AssetTransferTxnFields - noOpXfer := (fields.AssetAmount == 0) && (txn.Sender != fields.AssetReceiver) && // optin - !fields.AssetCloseTo.IsZero() && // closeout - !fields.AssetSender.IsZero() // clawback + noOpXfer := (fields.AssetAmount == 0) && (txn.Sender != fields.AssetReceiver) && // not an optin + fields.AssetCloseTo.IsZero() && // not a closeout + fields.AssetSender.IsZero() // not a clawback if noOpXfer { break From 58c4a91f609da196c83182cfd682437f218248ee Mon Sep 17 00:00:00 2001 From: Will Winder Date: Thu, 10 Nov 2022 10:21:38 -0500 Subject: [PATCH 5/5] Move logic to a function. --- accounting/eval_preload.go | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/accounting/eval_preload.go b/accounting/eval_preload.go index 56872f4c2..501b633f2 100644 --- a/accounting/eval_preload.go +++ b/accounting/eval_preload.go @@ -9,6 +9,19 @@ import ( "github.com/algorand/go-algorand/protocol" ) +func isNoOpAssetXfer(stxnad *transactions.SignedTxnWithAD) bool { + txn := &stxnad.Txn + fields := &txn.AssetTransferTxnFields + + if txn.Type != protocol.AssetTransferTx { + return false + } + + return (fields.AssetAmount == 0) && (txn.Sender != fields.AssetReceiver) && // not an optin + fields.AssetCloseTo.IsZero() && // not a closeout + fields.AssetSender.IsZero() // not a clawback +} + // Add requests for asset and app creators to `assetsReq` and `appsReq` for the given // transaction. func addToCreatorsRequest(stxnad *transactions.SignedTxnWithAD, assetsReq map[basics.AssetIndex]struct{}, appsReq map[basics.AppIndex]struct{}) { @@ -23,11 +36,7 @@ func addToCreatorsRequest(stxnad *transactions.SignedTxnWithAD, assetsReq map[ba case protocol.AssetTransferTx: fields := &txn.AssetTransferTxnFields - noOpXfer := (fields.AssetAmount == 0) && (txn.Sender != fields.AssetReceiver) && // not an optin - fields.AssetCloseTo.IsZero() && // not a closeout - fields.AssetSender.IsZero() // not a clawback - - if fields.XferAsset != 0 && !noOpXfer { + if fields.XferAsset != 0 && !isNoOpAssetXfer(stxnad) { assetsReq[fields.XferAsset] = struct{}{} } case protocol.AssetFreezeTx: @@ -116,16 +125,12 @@ func addToAccountsResourcesRequest(stxnad *transactions.SignedTxnWithAD, assetCr } } case protocol.AssetTransferTx: - fields := &txn.AssetTransferTxnFields - - noOpXfer := (fields.AssetAmount == 0) && (txn.Sender != fields.AssetReceiver) && // not an optin - fields.AssetCloseTo.IsZero() && // not a closeout - fields.AssetSender.IsZero() // not a clawback - - if noOpXfer { + if isNoOpAssetXfer(stxnad) { break } + fields := &txn.AssetTransferTxnFields + creatable := ledger.Creatable{ Index: basics.CreatableIndex(fields.XferAsset), Type: basics.AssetCreatable,