diff --git a/mapper/pchain/tx_parser.go b/mapper/pchain/tx_parser.go index 0f0ad2e7..91766dd8 100644 --- a/mapper/pchain/tx_parser.go +++ b/mapper/pchain/tx_parser.go @@ -387,9 +387,17 @@ func addValidatorMetadataToStakeOuts(ops *txOps, validator txs.ValidatorTx, star out.Metadata[MetadataValidatorNodeID] = validator.NodeID().String() out.Metadata[MetadataStakingStartTime] = uint64(startTime.Unix()) out.Metadata[MetadataStakingEndTime] = uint64(validator.EndTime().Unix()) + out.Metadata[MetadataValidatorWeight] = validator.Weight() out.Metadata[MetadataValidatorRewardsOwner] = getAddressArray(validator.ValidationRewardsOwner().(*secp256k1fx.OutputOwners), hrp) out.Metadata[MetadataDelegationRewardsOwner] = getAddressArray(validator.DelegationRewardsOwner().(*secp256k1fx.OutputOwners), hrp) out.Metadata[MetadataSubnetID] = validator.SubnetID().String() + + switch v := validator.(type) { + case *txs.AddValidatorTx: + out.Metadata[MetadataDelegationFee] = v.DelegationShares + case *txs.AddPermissionlessValidatorTx: + out.Metadata[MetadataDelegationFee] = v.DelegationShares + } } } @@ -402,6 +410,7 @@ func addDelegatorMetadataToStakeOuts(ops *txOps, delegator txs.DelegatorTx, star out.Metadata[MetadataValidatorNodeID] = delegator.NodeID().String() out.Metadata[MetadataStakingStartTime] = uint64(startTime.Unix()) out.Metadata[MetadataStakingEndTime] = uint64(delegator.EndTime().Unix()) + out.Metadata[MetadataValidatorWeight] = delegator.Weight() out.Metadata[MetadataDelegatorRewardsOwner] = getAddressArray(delegator.RewardsOwner().(*secp256k1fx.OutputOwners), hrp) out.Metadata[MetadataSubnetID] = delegator.SubnetID().String() } diff --git a/mapper/pchain/tx_parser_test.go b/mapper/pchain/tx_parser_test.go index 79cd2d71..5caf991a 100644 --- a/mapper/pchain/tx_parser_test.go +++ b/mapper/pchain/tx_parser_test.go @@ -176,6 +176,11 @@ func TestMapAddValidatorTx(t *testing.T) { require.Equal(2, cntInputMeta) require.Zero(cntOutputMeta) require.Equal(1, cntMetaType) + + stakeOutOp := rosettaTransaction.Operations[2] + require.Equal(OpTypeStakeOutput, stakeOutOp.Metadata["type"]) + require.Equal(uint64(2000000000), stakeOutOp.Metadata[MetadataValidatorWeight]) + require.Equal(uint32(20000), stakeOutOp.Metadata[MetadataDelegationFee]) } func TestMapAddPermissionlessValidatorTx(t *testing.T) { @@ -209,6 +214,11 @@ func TestMapAddPermissionlessValidatorTx(t *testing.T) { require.Equal(2, cntInputMeta) require.Zero(cntOutputMeta) require.Equal(1, cntMetaType) + + stakeOutOp := rosettaTransaction.Operations[2] + require.Equal(OpTypeStakeOutput, stakeOutOp.Metadata["type"]) + require.Equal(uint64(2000000000), stakeOutOp.Metadata[MetadataValidatorWeight]) + require.Equal(uint32(20000), stakeOutOp.Metadata[MetadataDelegationFee]) } // TODO: Remove Post-Durango @@ -262,6 +272,9 @@ func TestMapAddDelegatorTx(t *testing.T) { require.Equal(OpTypeInput, rosettaTransaction.Operations[0].Metadata["type"]) require.Equal(OpTypeOutput, rosettaTransaction.Operations[1].Metadata["type"]) require.Equal(OpTypeStakeOutput, rosettaTransaction.Operations[2].Metadata["type"]) + + stakeOutOp := rosettaTransaction.Operations[2] + require.Equal(uint64(1000000000), stakeOutOp.Metadata[MetadataValidatorWeight]) } func TestMapAddPermissionlessDelegatorTx(t *testing.T) { @@ -314,6 +327,9 @@ func TestMapAddPermissionlessDelegatorTx(t *testing.T) { require.Equal(OpTypeInput, rosettaTransaction.Operations[0].Metadata["type"]) require.Equal(OpTypeOutput, rosettaTransaction.Operations[1].Metadata["type"]) require.Equal(OpTypeStakeOutput, rosettaTransaction.Operations[2].Metadata["type"]) + + stakeOutOp := rosettaTransaction.Operations[2] + require.Equal(uint64(1000000000), stakeOutOp.Metadata[MetadataValidatorWeight]) } func TestMapImportTx(t *testing.T) { diff --git a/mapper/pchain/types.go b/mapper/pchain/types.go index cf65da9e..02a46c1f 100644 --- a/mapper/pchain/types.go +++ b/mapper/pchain/types.go @@ -40,6 +40,8 @@ const ( MetadataValidatorNodeID = "validator_node_id" MetadataStakingStartTime = "staking_start_time" MetadataStakingEndTime = "staking_end_time" + MetadataValidatorWeight = "validator_weight" + MetadataDelegationFee = "delegation_fee" MetadataMessage = "message" MetadataSigner = "signer" diff --git a/service/backend/pchain/construction_test.go b/service/backend/pchain/construction_test.go index d9732570..b176824a 100644 --- a/service/backend/pchain/construction_test.go +++ b/service/backend/pchain/construction_test.go @@ -594,6 +594,8 @@ func TestAddValidatorTxConstruction(t *testing.T) { "delegation_rewards_owner": []string{ewoqAccountP.Address}, "validator_rewards_owner": []string{ewoqAccountP.Address}, "signer": pop, + "validator_weight": uint64(2_000_000_000_000), + "delegation_fee": shares, }, }, } @@ -839,6 +841,7 @@ func TestAddDelegatorTxConstruction(t *testing.T) { "validator_node_id": nodeID, "subnet_id": pChainID.String(), "delegator_rewards_owner": []string{ewoqAccountP.Address}, + "validator_weight": uint64(25_000_000_000), }, }, }