mirror of
https://github.com/luxfi/sdk.git
synced 2026-10-30 15:19:23 +00:00
github.com/luxfi/codec is gone from this module — no import, no call, no require. Nothing here marshals or unmarshals a transaction any more. WHY IT BROKE. codec deleted its jsonrpc subpackage (1b67d6a, "delete dead subpackages") while nine files imported it. It looked dead because the PUBLISHED [email protected] still ships it, so only a workspace build — which resolves codec from the local checkout — ever saw the break. THE WIRE. A tx already carries its own ZAP encoding, so the codec was re-deriving what the tx could hand over: txs.Codec.Marshal(txs.CodecVersion, &tx.Unsigned) -> tx.Unsigned.Bytes() txs.UnsignedBytes(tx.Unsigned) txs.Codec.Marshal(txs.CodecVersion, tx) -> tx.Initialize() txs.Codec.Unmarshal(txBytes, &tx) -> txs.Parse(txBytes) codec.Unmarshal(utxoBytes, &utxo) -> utxo.ParseUTXO(...) These are the same calls the node makes in txs.Tx.Sign. AddAllUTXOs no longer takes a codec.Manager, and SortTransferableOutputs / state.Sort / SortOperations no longer get one — upstream dropped the parameter. PARALLEL IMPLEMENTATIONS, DELETED. wallet/chain/{p,x} carried a second copy of the builder and signer beside the subpackages that already held them — p/signer_visitor.go and p/signer/visitor.go were both 399 lines of the same thing, and each defect had to be fixed twice. The flat files are gone; the package keeps the facade it already had in wallet_exports.go, which re-exports the subpackage. -4787 lines. wallet/chain/c is deleted. Its whole reason to exist was a codec.Manager scaffold for C-chain atomic-tx wire that nothing runs: NewWallet was passed nil for it, and the builder was commented out. The two symbols anything used move to where they are read — Account, a balance and a nonce off an EVM client, and EVMKeychain, the geth-address half of a keychain. Wallet no longer advertises a C() that only ever returned nil. ALIGNED. XAssetID -> UTXOAssetID, matching runtime.Runtime and netrunner, which already expected it. Keychain GetEth -> GetByEVM, EthAddrs -> EVMAddrs. warp UnsignedMessage and Message collapsed into one flat Message, so a signature is an Envelope rather than a second message type. netrunner's HealthResponse is read as a field: the getter form is protobuf, behind //go:build grpc, and the default build is ZAP-native. VERIFIED on a machine with the native libraries: go build ./... exits 0 with no codec require in go.mod, and go test ./... is 23 ok. Three packages still fail to build their tests — profiles, wallet/keychain, wallet/primary — and all three fail identically on the tree before this change: Consensus, VerifyHybridSecp256k1MLDSA and isXChainNotEnabled are referenced by tests and defined nowhere. evm failed there too and now passes.
69 lines
1.8 KiB
Go
69 lines
1.8 KiB
Go
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package p
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/luxfi/constants"
|
|
sdkinfo "github.com/luxfi/sdk/info"
|
|
"github.com/luxfi/sdk/platformvm"
|
|
"github.com/luxfi/sdk/wallet/chain/p/builder"
|
|
)
|
|
|
|
// gasPriceMultiplier increases the gas price to support multiple transactions
|
|
// to be issued.
|
|
//
|
|
// TODO: Handle this better. Either here or in the mempool.
|
|
const gasPriceMultiplier = 2
|
|
|
|
func NewContextFromURI(ctx context.Context, uri string) (*builder.Context, error) {
|
|
infoClient := sdkinfo.NewClient(uri)
|
|
chainClient := platformvm.NewClient(uri)
|
|
return NewContextFromClients(ctx, infoClient, chainClient)
|
|
}
|
|
|
|
func NewContextFromClients(
|
|
ctx context.Context,
|
|
infoClient *sdkinfo.Client,
|
|
chainClient *platformvm.Client,
|
|
) (*builder.Context, error) {
|
|
networkID, err := infoClient.GetNetworkID(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Fetch the P-Chain blockchain ID from the node
|
|
// This is critical for transaction verification - the node validates that
|
|
// tx.BlockchainID matches ctx.ChainID in its consensus context
|
|
pChainID, err := infoClient.GetBlockchainID(ctx, "P")
|
|
if err != nil {
|
|
// Fall back to default PlatformChainID if the API call fails
|
|
pChainID = constants.PlatformChainID
|
|
}
|
|
|
|
luxAssetID, err := chainClient.GetStakingAssetID(ctx, constants.PrimaryNetworkID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
dynamicFeeConfig, err := chainClient.GetFeeConfig(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
_, gasPrice, _, err := chainClient.GetFeeState(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &builder.Context{
|
|
NetworkID: networkID,
|
|
ChainID: pChainID,
|
|
UTXOAssetID: luxAssetID,
|
|
ComplexityWeights: dynamicFeeConfig.Weights,
|
|
GasPrice: gasPriceMultiplier * gasPrice,
|
|
}, nil
|
|
}
|