mirror of
https://github.com/pezkuwichain/pwap.git
synced 2026-06-13 00:51:02 +00:00
fix: Correct SwapExecuted event destructuring - add missing send_to field
The SwapExecuted event has 5 fields (who, send_to, amountIn, amountOut, path), not 4. The old code was missing send_to, which caused the path (asset array) to be assigned the recipient address instead, resulting in all swaps showing as HEZ→HEZ regardless of actual token pairs. This fixes the swap history display to show correct token symbols.
This commit is contained in:
@@ -368,7 +368,16 @@ const TokenSwap = () => {
|
|||||||
|
|
||||||
// Check for AssetConversion::SwapExecuted event
|
// Check for AssetConversion::SwapExecuted event
|
||||||
if (api.events.assetConversion?.SwapExecuted?.is(event)) {
|
if (api.events.assetConversion?.SwapExecuted?.is(event)) {
|
||||||
const [who, path, amountIn, amountOut] = event.data;
|
console.log('🔍 Full event.data:', event.data.toJSON());
|
||||||
|
console.log('🔍 event.data length:', event.data.length);
|
||||||
|
|
||||||
|
// SwapExecuted has 5 fields: (who, send_to, amountIn, amountOut, path)
|
||||||
|
const [who, sendTo, amountIn, amountOut, path] = event.data;
|
||||||
|
|
||||||
|
console.log('🔍 who:', who.toString());
|
||||||
|
console.log('🔍 sendTo:', sendTo.toString());
|
||||||
|
console.log('🔍 path type:', typeof path);
|
||||||
|
console.log('🔍 path:', path);
|
||||||
|
|
||||||
// Parse path to get token symbols - path is Vec<MultiAsset>
|
// Parse path to get token symbols - path is Vec<MultiAsset>
|
||||||
let fromAssetId = 0;
|
let fromAssetId = 0;
|
||||||
@@ -378,21 +387,39 @@ const TokenSwap = () => {
|
|||||||
// Try different path formats
|
// Try different path formats
|
||||||
const pathArray = path.toJSON ? path.toJSON() : path;
|
const pathArray = path.toJSON ? path.toJSON() : path;
|
||||||
|
|
||||||
|
console.log('🔍 Raw path data:', JSON.stringify(pathArray, null, 2));
|
||||||
|
|
||||||
if (Array.isArray(pathArray) && pathArray.length >= 2) {
|
if (Array.isArray(pathArray) && pathArray.length >= 2) {
|
||||||
// Extract asset IDs from path
|
// Extract asset IDs from path
|
||||||
const asset0 = pathArray[0];
|
const asset0 = pathArray[0];
|
||||||
const asset1 = pathArray[1];
|
const asset1 = pathArray[1];
|
||||||
|
|
||||||
|
console.log('🔍 Asset0 structure:', JSON.stringify(asset0, null, 2));
|
||||||
|
console.log('🔍 Asset1 structure:', JSON.stringify(asset1, null, 2));
|
||||||
|
|
||||||
// Handle different enum formats
|
// Handle different enum formats
|
||||||
if (typeof asset0 === 'object') {
|
if (typeof asset0 === 'object' && asset0 !== null) {
|
||||||
fromAssetId = asset0.nativeOrAsset?.asset || asset0.NativeOrAsset?.Asset || 0;
|
// Try multiple access patterns
|
||||||
|
fromAssetId = asset0.nativeOrAsset?.asset ||
|
||||||
|
asset0.NativeOrAsset?.Asset ||
|
||||||
|
asset0.asset ||
|
||||||
|
asset0.Asset ||
|
||||||
|
(typeof asset0.nativeOrAsset?.Native !== 'undefined' ? 0 : undefined) ||
|
||||||
|
(typeof asset0.NativeOrAsset?.Native !== 'undefined' ? 0 : undefined) ||
|
||||||
|
0;
|
||||||
}
|
}
|
||||||
if (typeof asset1 === 'object') {
|
if (typeof asset1 === 'object' && asset1 !== null) {
|
||||||
toAssetId = asset1.nativeOrAsset?.asset || asset1.NativeOrAsset?.Asset || 0;
|
toAssetId = asset1.nativeOrAsset?.asset ||
|
||||||
|
asset1.NativeOrAsset?.Asset ||
|
||||||
|
asset1.asset ||
|
||||||
|
asset1.Asset ||
|
||||||
|
(typeof asset1.nativeOrAsset?.Native !== 'undefined' ? 0 : undefined) ||
|
||||||
|
(typeof asset1.NativeOrAsset?.Native !== 'undefined' ? 0 : undefined) ||
|
||||||
|
0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('🔍 Parsed swap path:', { pathArray, fromAssetId, toAssetId });
|
console.log('🔍 Parsed IDs:', { fromAssetId, toAssetId });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.warn('Failed to parse path:', err);
|
console.warn('Failed to parse path:', err);
|
||||||
}
|
}
|
||||||
@@ -613,23 +640,53 @@ const TokenSwap = () => {
|
|||||||
events.forEach((record: any) => {
|
events.forEach((record: any) => {
|
||||||
const { event } = record;
|
const { event } = record;
|
||||||
if (api.events.assetConversion?.SwapExecuted?.is(event)) {
|
if (api.events.assetConversion?.SwapExecuted?.is(event)) {
|
||||||
const [who, path, amountIn, amountOut] = event.data;
|
console.log('🔄 Full event.data:', event.data.toJSON());
|
||||||
|
console.log('🔄 event.data length:', event.data.length);
|
||||||
|
|
||||||
|
// SwapExecuted has 5 fields: (who, send_to, amountIn, amountOut, path)
|
||||||
|
const [who, sendTo, amountIn, amountOut, path] = event.data;
|
||||||
|
|
||||||
|
console.log('🔄 who:', who.toString());
|
||||||
|
console.log('🔄 sendTo:', sendTo.toString());
|
||||||
|
console.log('🔄 path type:', typeof path);
|
||||||
|
console.log('🔄 path:', path);
|
||||||
|
|
||||||
// Parse path (same logic as main history fetch)
|
// Parse path (same logic as main history fetch)
|
||||||
let fromAssetId = 0;
|
let fromAssetId = 0;
|
||||||
let toAssetId = 0;
|
let toAssetId = 0;
|
||||||
try {
|
try {
|
||||||
const pathArray = path.toJSON ? path.toJSON() : path;
|
const pathArray = path.toJSON ? path.toJSON() : path;
|
||||||
|
|
||||||
|
console.log('🔄 Refresh path data:', JSON.stringify(pathArray, null, 2));
|
||||||
|
|
||||||
if (Array.isArray(pathArray) && pathArray.length >= 2) {
|
if (Array.isArray(pathArray) && pathArray.length >= 2) {
|
||||||
const asset0 = pathArray[0];
|
const asset0 = pathArray[0];
|
||||||
const asset1 = pathArray[1];
|
const asset1 = pathArray[1];
|
||||||
if (typeof asset0 === 'object') {
|
|
||||||
fromAssetId = asset0.nativeOrAsset?.asset || asset0.NativeOrAsset?.Asset || 0;
|
console.log('🔄 Refresh Asset0:', JSON.stringify(asset0, null, 2));
|
||||||
|
console.log('🔄 Refresh Asset1:', JSON.stringify(asset1, null, 2));
|
||||||
|
|
||||||
|
if (typeof asset0 === 'object' && asset0 !== null) {
|
||||||
|
fromAssetId = asset0.nativeOrAsset?.asset ||
|
||||||
|
asset0.NativeOrAsset?.Asset ||
|
||||||
|
asset0.asset ||
|
||||||
|
asset0.Asset ||
|
||||||
|
(typeof asset0.nativeOrAsset?.Native !== 'undefined' ? 0 : undefined) ||
|
||||||
|
(typeof asset0.NativeOrAsset?.Native !== 'undefined' ? 0 : undefined) ||
|
||||||
|
0;
|
||||||
}
|
}
|
||||||
if (typeof asset1 === 'object') {
|
if (typeof asset1 === 'object' && asset1 !== null) {
|
||||||
toAssetId = asset1.nativeOrAsset?.asset || asset1.NativeOrAsset?.Asset || 0;
|
toAssetId = asset1.nativeOrAsset?.asset ||
|
||||||
|
asset1.NativeOrAsset?.Asset ||
|
||||||
|
asset1.asset ||
|
||||||
|
asset1.Asset ||
|
||||||
|
(typeof asset1.nativeOrAsset?.Native !== 'undefined' ? 0 : undefined) ||
|
||||||
|
(typeof asset1.NativeOrAsset?.Native !== 'undefined' ? 0 : undefined) ||
|
||||||
|
0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log('🔄 Refresh Parsed IDs:', { fromAssetId, toAssetId });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.warn('Failed to parse path in refresh:', err);
|
console.warn('Failed to parse path in refresh:', err);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user