diff --git a/OneGateApp/Controls/Popups/SendTransactionPopup.xaml b/OneGateApp/Controls/Popups/SendTransactionPopup.xaml
index 4e7cebd..7cc6fa0 100644
--- a/OneGateApp/Controls/Popups/SendTransactionPopup.xaml
+++ b/OneGateApp/Controls/Popups/SendTransactionPopup.xaml
@@ -6,27 +6,58 @@
x:Class="NeoOrder.OneGate.Controls.Popups.SendTransactionPopup"
x:TypeArguments="x:Boolean">
-
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -36,6 +67,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OneGateApp/Controls/Popups/SendTransactionPopup.xaml.cs b/OneGateApp/Controls/Popups/SendTransactionPopup.xaml.cs
index dc50718..f4b65cc 100644
--- a/OneGateApp/Controls/Popups/SendTransactionPopup.xaml.cs
+++ b/OneGateApp/Controls/Popups/SendTransactionPopup.xaml.cs
@@ -1,6 +1,8 @@
using Neo;
using Neo.Network.P2P.Payloads;
using Neo.SmartContract.Native;
+using Neo.VM;
+using Neo.Wallets;
using NeoOrder.OneGate.Controls.Views;
using NeoOrder.OneGate.Models;
using NeoOrder.OneGate.Models.Intents;
@@ -13,12 +15,16 @@ namespace NeoOrder.OneGate.Controls.Popups;
public partial class SendTransactionPopup : MyPopup
{
readonly WalletAuthorizationService walletAuthorizationService;
+ readonly ProtocolSettings protocolSettings;
+ readonly Wallet wallet;
public string Title { get; set { field = value; OnPropertyChanged(); } } = Strings.SendTransaction;
public string Message { get; set { field = value; OnPropertyChanged(); } } = Strings.SendTransactionText;
- public required Transaction Transaction { get; set { field = value; OnPropertyChanged(null); } }
- public TransactionIntent[]? Intents { get; set { field = value; OnPropertyChanged(); } }
- public InvocationResult? InvocationResult { get; set { field = value; OnPropertyChanged(); } }
+ public required Transaction Transaction { get; set { field = value; OnPropertyChanged(null); RefreshPreview(); } }
+ public TransactionIntent[]? Intents { get { return field; } set { field = value; OnPropertyChanged(); OnPropertyChanged(nameof(HasIntents)); RefreshPreview(); } }
+ public InvocationResult? InvocationResult { get { return field; } set { field = value; OnPropertyChanged(); OnPropertyChanged(nameof(HasExecutionWarning)); RefreshPreview(); } }
+ public TransactionPreviewAssetChange[] AssetChanges { get; private set { field = value; OnPropertyChanged(); OnPropertyChanged(nameof(HasAssetChanges)); } } = [];
+ public TransactionPreviewWarning[] RiskWarnings { get; private set { field = value; OnPropertyChanged(); OnPropertyChanged(nameof(HasRiskWarnings)); } } = [];
public long Fee => (Transaction?.SystemFee + Transaction?.NetworkFee) ?? 0;
public BigDecimal DecimalFee => new((BigInteger)Fee, NativeContract.GAS.Decimals);
@@ -26,10 +32,17 @@ public partial class SendTransactionPopup : MyPopup
public BigDecimal DecimalSystemFee => new((BigInteger)(Transaction?.SystemFee ?? 0), NativeContract.GAS.Decimals);
public BigDecimal DecimalNetworkFee => new((BigInteger)(Transaction?.NetworkFee ?? 0), NativeContract.GAS.Decimals);
public string FeeDetails => $"{DecimalSystemFee} (sys) + {DecimalNetworkFee} (net)";
+ public bool HasAssetChanges => AssetChanges.Length > 0;
+ public bool HasIntents => Intents?.Length > 0;
+ public bool HasRequestDetails => HasIntents && !HasAssetChanges;
+ public bool HasRiskWarnings => RiskWarnings.Length > 0;
+ public bool HasExecutionWarning => InvocationResult is { State: not VMState.HALT } || !string.IsNullOrWhiteSpace(InvocationResult?.Exception);
- public SendTransactionPopup(WalletAuthorizationService walletAuthorizationService)
+ public SendTransactionPopup(WalletAuthorizationService walletAuthorizationService, ProtocolSettings protocolSettings, IWalletProvider walletProvider)
{
this.walletAuthorizationService = walletAuthorizationService;
+ this.protocolSettings = protocolSettings;
+ this.wallet = walletProvider.GetWallet()!;
InitializeComponent();
}
@@ -47,4 +60,123 @@ async void OnCancel(object sender, EventArgs e)
{
await CloseAsync(false);
}
+
+ void RefreshPreview()
+ {
+ AssetChanges = BuildAssetChanges();
+ RiskWarnings = BuildRiskWarnings();
+ OnPropertyChanged(nameof(Fee));
+ OnPropertyChanged(nameof(DecimalFee));
+ OnPropertyChanged(nameof(DisplayFee));
+ OnPropertyChanged(nameof(DecimalSystemFee));
+ OnPropertyChanged(nameof(DecimalNetworkFee));
+ OnPropertyChanged(nameof(FeeDetails));
+ OnPropertyChanged(nameof(HasRequestDetails));
+ OnPropertyChanged(nameof(HasExecutionWarning));
+ }
+
+ TransactionPreviewAssetChange[] BuildAssetChanges()
+ {
+ if (Intents is null || Intents.Length == 0) return [];
+
+ List changes = [];
+ foreach (TransactionIntent intent in Intents)
+ {
+ switch (intent)
+ {
+ case TransferIntent transfer:
+ bool fromWallet = wallet.Contains(transfer.From);
+ bool toWallet = wallet.Contains(transfer.To);
+ changes.Add(new TransactionPreviewAssetChange
+ {
+ Title = transfer.Asset.Symbol,
+ AmountText = $"{GetAmountPrefix(fromWallet, toWallet)}{transfer.DisplayAmount}",
+ DetailText = GetTransferDetail(transfer.From, transfer.To, fromWallet, toWallet),
+ AssetHashText = transfer.Asset.Hash.ToString(),
+ PaymentAddressText = FullAddress(transfer.From),
+ ReceivingAddressText = FullAddress(transfer.To),
+ IsOutgoing = fromWallet && !toWallet,
+ IsIncoming = toWallet && !fromWallet
+ });
+ break;
+ case Nep11TransferIntent nftTransfer:
+ bool nftFromWallet = wallet.Contains(nftTransfer.From);
+ bool nftToWallet = wallet.Contains(nftTransfer.To);
+ changes.Add(new TransactionPreviewAssetChange
+ {
+ Title = nftTransfer.Asset.Name,
+ AmountText = $"{GetAmountPrefix(nftFromWallet, nftToWallet)}{Strings.NFT}",
+ DetailText = GetTransferDetail(nftTransfer.From, nftTransfer.To, nftFromWallet, nftToWallet),
+ AssetHashText = (nftTransfer.Asset.TokenInfo?.Hash ?? nftTransfer.Asset.CollectionId).ToString(),
+ PaymentAddressText = FullAddress(nftTransfer.From),
+ ReceivingAddressText = FullAddress(nftTransfer.To),
+ IsOutgoing = nftFromWallet && !nftToWallet,
+ IsIncoming = nftToWallet && !nftFromWallet
+ });
+ break;
+ }
+ }
+ return changes.ToArray();
+ }
+
+ TransactionPreviewWarning[] BuildRiskWarnings()
+ {
+ List warnings = [];
+ if (Intents is null || Intents.Length == 0)
+ {
+ warnings.Add(new TransactionPreviewWarning
+ {
+ Title = Strings.UnknownAssetChanges,
+ Message = Strings.UnknownAssetChangesText,
+ IsHighRisk = true
+ });
+ }
+ else if (Intents.Any(p => p is InvocationIntent))
+ {
+ warnings.Add(new TransactionPreviewWarning
+ {
+ Title = Strings.ContractRequest,
+ Message = Strings.ContractRequestRiskText
+ });
+ }
+ if (HasExecutionWarning)
+ {
+ warnings.Add(new TransactionPreviewWarning
+ {
+ Title = Strings.ExecutionWarning,
+ Message = Strings.ExecutionWarningText,
+ IsHighRisk = true
+ });
+ }
+ return warnings.ToArray();
+ }
+
+ string GetTransferDetail(UInt160 from, UInt160 to, bool fromWallet, bool toWallet)
+ {
+ if (fromWallet && !toWallet)
+ return string.Format(Strings.SendingToFormat, ShortAddress(to));
+ if (toWallet && !fromWallet)
+ return string.Format(Strings.ReceivingFromFormat, ShortAddress(from));
+ if (fromWallet && toWallet)
+ return Strings.InternalWalletTransfer;
+ return string.Format(Strings.ExternalTransferFormat, ShortAddress(from), ShortAddress(to));
+ }
+
+ string ShortAddress(UInt160 hash)
+ {
+ string address = hash.ToAddress(protocolSettings.AddressVersion);
+ return address.Length <= 12 ? address : $"{address[..6]}...{address[^4..]}";
+ }
+
+ string FullAddress(UInt160 hash)
+ {
+ return hash.ToAddress(protocolSettings.AddressVersion);
+ }
+
+ static string GetAmountPrefix(bool fromWallet, bool toWallet)
+ {
+ if (fromWallet && !toWallet) return "-";
+ if (toWallet && !fromWallet) return "+";
+ return "";
+ }
}
diff --git a/OneGateApp/Models/TransactionPreviewAssetChange.cs b/OneGateApp/Models/TransactionPreviewAssetChange.cs
new file mode 100644
index 0000000..a7bd47c
--- /dev/null
+++ b/OneGateApp/Models/TransactionPreviewAssetChange.cs
@@ -0,0 +1,13 @@
+namespace NeoOrder.OneGate.Models;
+
+public class TransactionPreviewAssetChange
+{
+ public required string Title { get; init; }
+ public required string AmountText { get; init; }
+ public required string DetailText { get; init; }
+ public required string AssetHashText { get; init; }
+ public required string PaymentAddressText { get; init; }
+ public required string ReceivingAddressText { get; init; }
+ public bool IsOutgoing { get; init; }
+ public bool IsIncoming { get; init; }
+}
diff --git a/OneGateApp/Models/TransactionPreviewWarning.cs b/OneGateApp/Models/TransactionPreviewWarning.cs
new file mode 100644
index 0000000..37b738c
--- /dev/null
+++ b/OneGateApp/Models/TransactionPreviewWarning.cs
@@ -0,0 +1,8 @@
+namespace NeoOrder.OneGate.Models;
+
+public class TransactionPreviewWarning
+{
+ public required string Title { get; init; }
+ public required string Message { get; init; }
+ public bool IsHighRisk { get; init; }
+}
diff --git a/OneGateApp/Properties/Strings.Designer.cs b/OneGateApp/Properties/Strings.Designer.cs
index 9b455dd..7b5365f 100644
--- a/OneGateApp/Properties/Strings.Designer.cs
+++ b/OneGateApp/Properties/Strings.Designer.cs
@@ -168,6 +168,15 @@ internal static string Asset {
}
}
+ ///
+ /// 查找类似 Asset hash 的本地化字符串。
+ ///
+ internal static string AssetHash {
+ get {
+ return ResourceManager.GetString("AssetHash", resourceCulture);
+ }
+ }
+
///
/// 查找类似 Assets hidden 的本地化字符串。
///
@@ -895,6 +904,159 @@ internal static string ExecutionResult {
}
}
+ ///
+ /// 查找类似 Asset changes 的本地化字符串。
+ ///
+ internal static string AssetChanges {
+ get {
+ return ResourceManager.GetString("AssetChanges", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 Estimated from decoded transfer requests. 的本地化字符串。
+ ///
+ internal static string AssetChangesText {
+ get {
+ return ResourceManager.GetString("AssetChangesText", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 No direct asset movement was decoded. Review contract details before signing. 的本地化字符串。
+ ///
+ internal static string NoDirectAssetChanges {
+ get {
+ return ResourceManager.GetString("NoDirectAssetChanges", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 Risk review 的本地化字符串。
+ ///
+ internal static string RiskReview {
+ get {
+ return ResourceManager.GetString("RiskReview", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 Check these items before you approve. 的本地化字符串。
+ ///
+ internal static string RiskReviewText {
+ get {
+ return ResourceManager.GetString("RiskReviewText", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 Request details 的本地化字符串。
+ ///
+ internal static string RequestDetails {
+ get {
+ return ResourceManager.GetString("RequestDetails", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 Unknown asset changes 的本地化字符串。
+ ///
+ internal static string UnknownAssetChanges {
+ get {
+ return ResourceManager.GetString("UnknownAssetChanges", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 OneGate could not decode this request into clear asset movements. 的本地化字符串。
+ ///
+ internal static string UnknownAssetChangesText {
+ get {
+ return ResourceManager.GetString("UnknownAssetChangesText", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 Contract request 的本地化字符串。
+ ///
+ internal static string ContractRequest {
+ get {
+ return ResourceManager.GetString("ContractRequest", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 Review the contract and method. Smart contracts can change balances during execution. 的本地化字符串。
+ ///
+ internal static string ContractRequestRiskText {
+ get {
+ return ResourceManager.GetString("ContractRequestRiskText", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 Execution warning 的本地化字符串。
+ ///
+ internal static string ExecutionWarning {
+ get {
+ return ResourceManager.GetString("ExecutionWarning", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 The preview execution did not finish successfully. Signing may fail or still consume fees. 的本地化字符串。
+ ///
+ internal static string ExecutionWarningText {
+ get {
+ return ResourceManager.GetString("ExecutionWarningText", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 Sending to {0} 的本地化字符串。
+ ///
+ internal static string SendingToFormat {
+ get {
+ return ResourceManager.GetString("SendingToFormat", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 Receiving from {0} 的本地化字符串。
+ ///
+ internal static string ReceivingFromFormat {
+ get {
+ return ResourceManager.GetString("ReceivingFromFormat", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 Transfer inside this wallet 的本地化字符串。
+ ///
+ internal static string InternalWalletTransfer {
+ get {
+ return ResourceManager.GetString("InternalWalletTransfer", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 {0} to {1} 的本地化字符串。
+ ///
+ internal static string ExternalTransferFormat {
+ get {
+ return ResourceManager.GetString("ExternalTransferFormat", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 NFT 的本地化字符串。
+ ///
+ internal static string NFT {
+ get {
+ return ResourceManager.GetString("NFT", resourceCulture);
+ }
+ }
+
///
/// 查找类似 Export private key 的本地化字符串。
///
@@ -1610,6 +1772,15 @@ internal static string PasswordProtectedPrivateKeyNep2 {
}
}
+ ///
+ /// 查找类似 Payment address 的本地化字符串。
+ ///
+ internal static string PaymentAddress {
+ get {
+ return ResourceManager.GetString("PaymentAddress", resourceCulture);
+ }
+ }
+
///
/// 查找类似 Your local wallet requires its password before signing sensitive actions. 的本地化字符串。
///
diff --git a/OneGateApp/Properties/Strings.de.resx b/OneGateApp/Properties/Strings.de.resx
index 9501220..0e74eb0 100644
--- a/OneGateApp/Properties/Strings.de.resx
+++ b/OneGateApp/Properties/Strings.de.resx
@@ -424,6 +424,63 @@ Nach der Deaktivierung müssen Sie Ihr Wallet-Passwort manuell eingeben, um den
Ausführungsergebnis
+
+ Asset-Änderungen
+
+
+ Aus dekodierten Übertragungsanfragen geschätzt.
+
+
+ Asset-Hash
+
+
+ Zahlungsadresse
+
+
+ Es wurde keine direkte Asset-Bewegung dekodiert. Prüfen Sie vor dem Signieren die Vertragsdetails.
+
+
+ Risikoprüfung
+
+
+ Prüfen Sie diese Punkte vor der Freigabe.
+
+
+ Anfragedetails
+
+
+ Unbekannte Asset-Änderungen
+
+
+ OneGate konnte diese Anfrage nicht in klare Asset-Bewegungen dekodieren.
+
+
+ Vertragsanfrage
+
+
+ Prüfen Sie Vertrag und Methode. Smart Contracts können während der Ausführung Guthaben ändern.
+
+
+ Ausführungswarnung
+
+
+ Die Vorschauausführung wurde nicht erfolgreich abgeschlossen. Das Signieren kann fehlschlagen oder dennoch Gebühren verbrauchen.
+
+
+ Senden an {0}
+
+
+ Empfangen von {0}
+
+
+ Übertragung innerhalb dieses Wallets
+
+
+ {0} an {1}
+
+
+ NFT
+
Erfolg
diff --git a/OneGateApp/Properties/Strings.es.resx b/OneGateApp/Properties/Strings.es.resx
index 9192f36..9ee6c1e 100644
--- a/OneGateApp/Properties/Strings.es.resx
+++ b/OneGateApp/Properties/Strings.es.resx
@@ -424,6 +424,63 @@ Después de desactivarla, deberá introducir manualmente la contraseña de la bi
Resultado de la ejecución
+
+ Cambios de activos
+
+
+ Estimado a partir de solicitudes de transferencia decodificadas.
+
+
+ Hash del activo
+
+
+ Dirección de pago
+
+
+ No se decodificó ningún movimiento directo de activos. Revisa los detalles del contrato antes de firmar.
+
+
+ Revisión de riesgo
+
+
+ Comprueba estos elementos antes de aprobar.
+
+
+ Detalles de la solicitud
+
+
+ Cambios de activos desconocidos
+
+
+ OneGate no pudo decodificar esta solicitud como movimientos claros de activos.
+
+
+ Solicitud de contrato
+
+
+ Revisa el contrato y el método. Los contratos inteligentes pueden cambiar saldos durante la ejecución.
+
+
+ Advertencia de ejecución
+
+
+ La ejecución de vista previa no finalizó correctamente. La firma puede fallar o aun así consumir comisiones.
+
+
+ Enviando a {0}
+
+
+ Recibiendo de {0}
+
+
+ Transferencia dentro de esta wallet
+
+
+ {0} a {1}
+
+
+ NFT
+
Éxito
diff --git a/OneGateApp/Properties/Strings.fr.resx b/OneGateApp/Properties/Strings.fr.resx
index 36505fb..0180a38 100644
--- a/OneGateApp/Properties/Strings.fr.resx
+++ b/OneGateApp/Properties/Strings.fr.resx
@@ -424,6 +424,63 @@ Après désactivation, vous devrez saisir manuellement le mot de passe du portef
Résultat de l’exécution
+
+ Variations d’actifs
+
+
+ Estimées à partir des demandes de transfert décodées.
+
+
+ Hash de l’actif
+
+
+ Adresse de paiement
+
+
+ Aucun mouvement direct d’actif n’a été décodé. Vérifiez les détails du contrat avant de signer.
+
+
+ Analyse des risques
+
+
+ Vérifiez ces éléments avant d’approuver.
+
+
+ Détails de la demande
+
+
+ Variations d’actifs inconnues
+
+
+ OneGate n’a pas pu décoder cette demande en mouvements d’actifs clairs.
+
+
+ Demande de contrat
+
+
+ Vérifiez le contrat et la méthode. Les contrats intelligents peuvent modifier les soldes pendant l’exécution.
+
+
+ Avertissement d’exécution
+
+
+ L’exécution d’aperçu ne s’est pas terminée correctement. La signature peut échouer ou quand même consommer des frais.
+
+
+ Envoi à {0}
+
+
+ Réception depuis {0}
+
+
+ Transfert dans ce portefeuille
+
+
+ {0} vers {1}
+
+
+ NFT
+
Succès
diff --git a/OneGateApp/Properties/Strings.id.resx b/OneGateApp/Properties/Strings.id.resx
index 8cf03e3..d8da2d5 100644
--- a/OneGateApp/Properties/Strings.id.resx
+++ b/OneGateApp/Properties/Strings.id.resx
@@ -424,6 +424,63 @@ Setelah dinonaktifkan, Anda harus memasukkan kata sandi wallet secara manual unt
Hasil eksekusi
+
+ Perubahan aset
+
+
+ Diperkirakan dari permintaan transfer yang didekode.
+
+
+ Hash aset
+
+
+ Alamat pembayaran
+
+
+ Tidak ada perpindahan aset langsung yang didekode. Tinjau detail kontrak sebelum menandatangani.
+
+
+ Tinjauan risiko
+
+
+ Periksa item ini sebelum menyetujui.
+
+
+ Detail permintaan
+
+
+ Perubahan aset tidak diketahui
+
+
+ OneGate tidak dapat mendekode permintaan ini menjadi perpindahan aset yang jelas.
+
+
+ Permintaan kontrak
+
+
+ Tinjau kontrak dan metodenya. Smart contract dapat mengubah saldo saat eksekusi.
+
+
+ Peringatan eksekusi
+
+
+ Eksekusi pratinjau tidak selesai dengan sukses. Penandatanganan dapat gagal atau tetap menghabiskan biaya.
+
+
+ Mengirim ke {0}
+
+
+ Menerima dari {0}
+
+
+ Transfer di dalam wallet ini
+
+
+ {0} ke {1}
+
+
+ NFT
+
Berhasil
diff --git a/OneGateApp/Properties/Strings.it.resx b/OneGateApp/Properties/Strings.it.resx
index 90f59ca..744f655 100644
--- a/OneGateApp/Properties/Strings.it.resx
+++ b/OneGateApp/Properties/Strings.it.resx
@@ -424,6 +424,63 @@ Dopo la disattivazione, dovrai inserire manualmente la password del wallet per a
Risultato dell'esecuzione
+
+ Variazioni asset
+
+
+ Stimate dalle richieste di trasferimento decodificate.
+
+
+ Hash asset
+
+
+ Indirizzo di pagamento
+
+
+ Non è stato decodificato alcun movimento diretto di asset. Controlla i dettagli del contratto prima di firmare.
+
+
+ Revisione del rischio
+
+
+ Controlla questi elementi prima di approvare.
+
+
+ Dettagli richiesta
+
+
+ Variazioni asset sconosciute
+
+
+ OneGate non ha potuto decodificare questa richiesta in movimenti asset chiari.
+
+
+ Richiesta contratto
+
+
+ Controlla contratto e metodo. Gli smart contract possono modificare i saldi durante l’esecuzione.
+
+
+ Avviso di esecuzione
+
+
+ L’esecuzione di anteprima non è terminata correttamente. La firma può fallire o consumare comunque commissioni.
+
+
+ Invio a {0}
+
+
+ Ricezione da {0}
+
+
+ Trasferimento all’interno di questo wallet
+
+
+ {0} a {1}
+
+
+ NFT
+
Successo
diff --git a/OneGateApp/Properties/Strings.ja.resx b/OneGateApp/Properties/Strings.ja.resx
index b9eab0d..c3e393a 100644
--- a/OneGateApp/Properties/Strings.ja.resx
+++ b/OneGateApp/Properties/Strings.ja.resx
@@ -424,6 +424,63 @@
実行結果
+
+ 資産の変化
+
+
+ デコード済みの転送要求から推定されます。
+
+
+ 資産ハッシュ
+
+
+ 支払いアドレス
+
+
+ 直接的な資産移動はデコードされませんでした。署名前にコントラクト詳細を確認してください。
+
+
+ リスク確認
+
+
+ 承認前にこれらの項目を確認してください。
+
+
+ リクエスト詳細
+
+
+ 不明な資産変化
+
+
+ OneGate はこの要求を明確な資産移動としてデコードできませんでした。
+
+
+ コントラクト要求
+
+
+ コントラクトとメソッドを確認してください。スマートコントラクトは実行中に残高を変更できます。
+
+
+ 実行警告
+
+
+ プレビュー実行は正常に完了しませんでした。署名が失敗するか、手数料を消費する可能性があります。
+
+
+ {0} に送信
+
+
+ {0} から受信
+
+
+ このウォレット内の転送
+
+
+ {0} から {1}
+
+
+ NFT
+
成功
diff --git a/OneGateApp/Properties/Strings.ko.resx b/OneGateApp/Properties/Strings.ko.resx
index d71a57b..7dcf4d1 100644
--- a/OneGateApp/Properties/Strings.ko.resx
+++ b/OneGateApp/Properties/Strings.ko.resx
@@ -424,6 +424,63 @@
실행 결과
+
+ 자산 변화
+
+
+ 디코딩된 전송 요청을 기준으로 추정됩니다.
+
+
+ 자산 해시
+
+
+ 결제 주소
+
+
+ 직접적인 자산 이동을 디코딩하지 못했습니다. 서명 전에 계약 세부 정보를 확인하세요.
+
+
+ 위험 검토
+
+
+ 승인하기 전에 이 항목들을 확인하세요.
+
+
+ 요청 세부 정보
+
+
+ 알 수 없는 자산 변화
+
+
+ OneGate가 이 요청을 명확한 자산 이동으로 디코딩하지 못했습니다.
+
+
+ 계약 요청
+
+
+ 계약과 메서드를 확인하세요. 스마트 계약은 실행 중 잔액을 변경할 수 있습니다.
+
+
+ 실행 경고
+
+
+ 미리보기 실행이 성공적으로 완료되지 않았습니다. 서명이 실패하거나 수수료가 소모될 수 있습니다.
+
+
+ {0}로 전송
+
+
+ {0}에서 수신
+
+
+ 이 지갑 내부 전송
+
+
+ {0}에서 {1}로
+
+
+ NFT
+
성공
diff --git a/OneGateApp/Properties/Strings.nl.resx b/OneGateApp/Properties/Strings.nl.resx
index 7a9105c..cfcdede 100644
--- a/OneGateApp/Properties/Strings.nl.resx
+++ b/OneGateApp/Properties/Strings.nl.resx
@@ -424,6 +424,63 @@ Na het uitschakelen moet u handmatig uw walletwachtwoord invoeren om toegang te
Uitvoeringsresultaat
+
+ Assetwijzigingen
+
+
+ Geschat op basis van gedecodeerde overdrachtsverzoeken.
+
+
+ Asset-hash
+
+
+ Betaaladres
+
+
+ Er is geen directe assetbeweging gedecodeerd. Controleer contractdetails voordat je ondertekent.
+
+
+ Risicobeoordeling
+
+
+ Controleer deze items voordat je goedkeurt.
+
+
+ Verzoekdetails
+
+
+ Onbekende assetwijzigingen
+
+
+ OneGate kon dit verzoek niet decoderen naar duidelijke assetbewegingen.
+
+
+ Contractverzoek
+
+
+ Controleer het contract en de methode. Smart contracts kunnen saldi wijzigen tijdens uitvoering.
+
+
+ Uitvoeringswaarschuwing
+
+
+ De voorbeeldexecutie is niet succesvol voltooid. Ondertekenen kan mislukken of toch kosten verbruiken.
+
+
+ Verzenden naar {0}
+
+
+ Ontvangen van {0}
+
+
+ Overdracht binnen deze wallet
+
+
+ {0} naar {1}
+
+
+ NFT
+
Geslaagd
diff --git a/OneGateApp/Properties/Strings.pt-BR.resx b/OneGateApp/Properties/Strings.pt-BR.resx
index 352f2a7..4e182d2 100644
--- a/OneGateApp/Properties/Strings.pt-BR.resx
+++ b/OneGateApp/Properties/Strings.pt-BR.resx
@@ -424,6 +424,63 @@ Depois de desativá-la, será necessário digitar manualmente a senha da carteir
Resultado da execução
+
+ Alterações de ativos
+
+
+ Estimado a partir de solicitações de transferência decodificadas.
+
+
+ Hash do ativo
+
+
+ Endereço de pagamento
+
+
+ Nenhum movimento direto de ativo foi decodificado. Revise os detalhes do contrato antes de assinar.
+
+
+ Revisão de risco
+
+
+ Verifique estes itens antes de aprovar.
+
+
+ Detalhes da solicitação
+
+
+ Alterações de ativos desconhecidas
+
+
+ O OneGate não conseguiu decodificar esta solicitação em movimentos claros de ativos.
+
+
+ Solicitação de contrato
+
+
+ Revise o contrato e o método. Smart contracts podem alterar saldos durante a execução.
+
+
+ Aviso de execução
+
+
+ A execução de prévia não terminou com sucesso. A assinatura pode falhar ou ainda consumir taxas.
+
+
+ Enviando para {0}
+
+
+ Recebendo de {0}
+
+
+ Transferência dentro desta carteira
+
+
+ {0} para {1}
+
+
+ NFT
+
Sucesso
diff --git a/OneGateApp/Properties/Strings.resx b/OneGateApp/Properties/Strings.resx
index e0fbfd0..23a5511 100644
--- a/OneGateApp/Properties/Strings.resx
+++ b/OneGateApp/Properties/Strings.resx
@@ -424,6 +424,63 @@ After disabling, you will need to manually enter your wallet password to authori
Execution result
+
+ Asset changes
+
+
+ Estimated from decoded transfer requests.
+
+
+ Asset hash
+
+
+ Payment address
+
+
+ No direct asset movement was decoded. Review contract details before signing.
+
+
+ Risk review
+
+
+ Check these items before you approve.
+
+
+ Request details
+
+
+ Unknown asset changes
+
+
+ OneGate could not decode this request into clear asset movements.
+
+
+ Contract request
+
+
+ Review the contract and method. Smart contracts can change balances during execution.
+
+
+ Execution warning
+
+
+ The preview execution did not finish successfully. Signing may fail or still consume fees.
+
+
+ Sending to {0}
+
+
+ Receiving from {0}
+
+
+ Transfer inside this wallet
+
+
+ {0} to {1}
+
+
+ NFT
+
Success
diff --git a/OneGateApp/Properties/Strings.ru.resx b/OneGateApp/Properties/Strings.ru.resx
index 4149470..321e5e7 100644
--- a/OneGateApp/Properties/Strings.ru.resx
+++ b/OneGateApp/Properties/Strings.ru.resx
@@ -424,6 +424,63 @@
Результат выполнения
+
+ Изменения активов
+
+
+ Оценено по декодированным запросам перевода.
+
+
+ Хэш актива
+
+
+ Адрес оплаты
+
+
+ Прямое движение активов не декодировано. Проверьте детали контракта перед подписью.
+
+
+ Проверка рисков
+
+
+ Проверьте эти пункты перед подтверждением.
+
+
+ Детали запроса
+
+
+ Неизвестные изменения активов
+
+
+ OneGate не смог декодировать этот запрос в понятные движения активов.
+
+
+ Запрос контракта
+
+
+ Проверьте контракт и метод. Смарт-контракты могут изменять балансы во время выполнения.
+
+
+ Предупреждение выполнения
+
+
+ Предварительное выполнение не завершилось успешно. Подпись может не пройти или всё равно израсходовать комиссии.
+
+
+ Отправка на {0}
+
+
+ Получение от {0}
+
+
+ Перевод внутри этого кошелька
+
+
+ {0} на {1}
+
+
+ NFT
+
Успешно
diff --git a/OneGateApp/Properties/Strings.tr.resx b/OneGateApp/Properties/Strings.tr.resx
index 7c3145c..649515c 100644
--- a/OneGateApp/Properties/Strings.tr.resx
+++ b/OneGateApp/Properties/Strings.tr.resx
@@ -424,6 +424,63 @@ Devre dışı bıraktıktan sonra erişimi yetkilendirmek için cüzdan şifreni
Yürütme sonucu
+
+ Varlık değişiklikleri
+
+
+ Çözümlenen transfer isteklerinden tahmin edilir.
+
+
+ Varlık hash’i
+
+
+ Ödeme adresi
+
+
+ Doğrudan varlık hareketi çözümlenemedi. İmzalamadan önce sözleşme ayrıntılarını inceleyin.
+
+
+ Risk incelemesi
+
+
+ Onaylamadan önce bu öğeleri kontrol edin.
+
+
+ İstek ayrıntıları
+
+
+ Bilinmeyen varlık değişiklikleri
+
+
+ OneGate bu isteği net varlık hareketlerine çözemedi.
+
+
+ Sözleşme isteği
+
+
+ Sözleşmeyi ve metodu inceleyin. Akıllı sözleşmeler yürütme sırasında bakiyeleri değiştirebilir.
+
+
+ Yürütme uyarısı
+
+
+ Önizleme yürütmesi başarıyla tamamlanmadı. İmzalama başarısız olabilir veya yine de ücret tüketebilir.
+
+
+ {0} adresine gönderiliyor
+
+
+ {0} adresinden alınıyor
+
+
+ Bu cüzdan içinde transfer
+
+
+ {0} → {1}
+
+
+ NFT
+
Başarılı
diff --git a/OneGateApp/Properties/Strings.vi.resx b/OneGateApp/Properties/Strings.vi.resx
index e101e22..3c8c8ed 100644
--- a/OneGateApp/Properties/Strings.vi.resx
+++ b/OneGateApp/Properties/Strings.vi.resx
@@ -424,6 +424,63 @@ Sau khi tắt, bạn sẽ cần nhập mật khẩu ví thủ công để cấp
Kết quả thực thi
+
+ Thay đổi tài sản
+
+
+ Ước tính từ các yêu cầu chuyển khoản đã giải mã.
+
+
+ Hash tài sản
+
+
+ Địa chỉ thanh toán
+
+
+ Không giải mã được chuyển động tài sản trực tiếp. Hãy xem chi tiết hợp đồng trước khi ký.
+
+
+ Xem xét rủi ro
+
+
+ Kiểm tra các mục này trước khi phê duyệt.
+
+
+ Chi tiết yêu cầu
+
+
+ Thay đổi tài sản không xác định
+
+
+ OneGate không thể giải mã yêu cầu này thành các chuyển động tài sản rõ ràng.
+
+
+ Yêu cầu hợp đồng
+
+
+ Xem lại hợp đồng và phương thức. Hợp đồng thông minh có thể thay đổi số dư trong khi thực thi.
+
+
+ Cảnh báo thực thi
+
+
+ Lần thực thi xem trước không hoàn tất thành công. Việc ký có thể thất bại hoặc vẫn tiêu tốn phí.
+
+
+ Gửi đến {0}
+
+
+ Nhận từ {0}
+
+
+ Chuyển trong ví này
+
+
+ {0} đến {1}
+
+
+ NFT
+
Thành công
diff --git a/OneGateApp/Properties/Strings.zh-Hans.resx b/OneGateApp/Properties/Strings.zh-Hans.resx
index 068ed29..09cf641 100644
--- a/OneGateApp/Properties/Strings.zh-Hans.resx
+++ b/OneGateApp/Properties/Strings.zh-Hans.resx
@@ -424,6 +424,63 @@
执行结果
+
+ 资产变化
+
+
+ 根据已解析的转账请求估算。
+
+
+ 资产哈希
+
+
+ 付款地址
+
+
+ 未解析出直接资产转移;签名前请检查合约详情。
+
+
+ 风险检查
+
+
+ 批准前请确认以下信息。
+
+
+ 请求详情
+
+
+ 未知资产变化
+
+
+ OneGate 无法将此请求解析为明确的资产变化。
+
+
+ 合约请求
+
+
+ 请检查合约和方法。智能合约可能在执行期间改变余额。
+
+
+ 执行预警
+
+
+ 预览执行未成功完成;签名可能失败,也可能仍消耗手续费。
+
+
+ 发送至 {0}
+
+
+ 接收自 {0}
+
+
+ 钱包内部转账
+
+
+ {0} 至 {1}
+
+
+ NFT
+
成功
diff --git a/OneGateApp/Properties/Strings.zh-Hant.resx b/OneGateApp/Properties/Strings.zh-Hant.resx
index e985d08..b59e753 100644
--- a/OneGateApp/Properties/Strings.zh-Hant.resx
+++ b/OneGateApp/Properties/Strings.zh-Hant.resx
@@ -424,6 +424,63 @@
執行結果
+
+ 資產變化
+
+
+ 根據已解析的轉帳請求估算。
+
+
+ 資產雜湊
+
+
+ 付款地址
+
+
+ 未解析出直接資產轉移;簽名前請檢查合約詳情。
+
+
+ 風險檢查
+
+
+ 核准前請確認以下資訊。
+
+
+ 請求詳情
+
+
+ 未知資產變化
+
+
+ OneGate 無法將此請求解析為明確的資產變化。
+
+
+ 合約請求
+
+
+ 請檢查合約和方法。智慧合約可能在執行期間改變餘額。
+
+
+ 執行預警
+
+
+ 預覽執行未成功完成;簽名可能失敗,也可能仍消耗手續費。
+
+
+ 傳送至 {0}
+
+
+ 接收自 {0}
+
+
+ 錢包內部轉帳
+
+
+ {0} 至 {1}
+
+
+ NFT
+
成功