mirror of
https://github.com/luxfi/keys.git
synced 2026-07-26 23:58:11 +00:00
initial commit
This commit is contained in:
+2
-2
@@ -6,8 +6,8 @@ package keys
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/luxfi/address"
|
||||
"github.com/luxfi/constants"
|
||||
"github.com/luxfi/node/utils/formatting/address"
|
||||
)
|
||||
|
||||
// Unit constants for LUX amounts
|
||||
@@ -254,7 +254,7 @@ func QuickAllocations(networkID uint32, keys []*ValidatorKey, amountPerKey uint6
|
||||
// TestnetAllocations creates allocations suitable for testnet (no vesting)
|
||||
func TestnetAllocations(networkID uint32, keys []*ValidatorKey) (*GenesisAllocations, error) {
|
||||
return NewAllocationBuilder(networkID, keys).
|
||||
WithAmount(100*MegaLux). // 100M LUX per validator
|
||||
WithAmount(100 * MegaLux). // 100M LUX per validator
|
||||
WithFeeAccount(0, 10*MegaLux). // First validator gets extra
|
||||
WithNoVesting().
|
||||
Build()
|
||||
|
||||
@@ -1,41 +1,31 @@
|
||||
module github.com/luxfi/keys
|
||||
|
||||
go 1.26.4
|
||||
go 1.25.5
|
||||
|
||||
require (
|
||||
github.com/luxfi/address v1.0.1
|
||||
github.com/luxfi/constants v1.5.8
|
||||
github.com/luxfi/crypto v1.20.0
|
||||
github.com/luxfi/go-bip32 v1.1.0
|
||||
github.com/luxfi/go-bip39 v1.2.0
|
||||
github.com/luxfi/ids v1.3.0
|
||||
github.com/luxfi/protocol v0.0.2
|
||||
github.com/luxfi/tls v1.0.3
|
||||
golang.org/x/crypto v0.52.0
|
||||
github.com/luxfi/constants v1.2.3
|
||||
github.com/luxfi/crypto v1.17.25
|
||||
github.com/luxfi/ids v1.2.4
|
||||
github.com/luxfi/node v1.22.37
|
||||
golang.org/x/crypto v0.46.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/btcsuite/btcd/btcutil v1.1.6 // indirect
|
||||
github.com/cloudflare/circl v1.6.3 // indirect
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 // indirect
|
||||
github.com/cloudflare/circl v1.6.2-0.20251204010831-23491bd573cf // indirect
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect
|
||||
github.com/google/renameio/v2 v2.0.0 // indirect
|
||||
github.com/gorilla/rpc v1.2.1 // indirect
|
||||
github.com/holiman/uint256 v1.3.2 // indirect
|
||||
github.com/luxfi/accel v1.2.4 // indirect
|
||||
github.com/luxfi/cache v1.2.1 // indirect
|
||||
github.com/luxfi/container v0.0.4 // indirect
|
||||
github.com/luxfi/formatting v1.0.1 // indirect
|
||||
github.com/luxfi/geth v1.16.98 // indirect
|
||||
github.com/luxfi/math v1.4.1 // indirect
|
||||
github.com/luxfi/math/big v0.1.0 // indirect
|
||||
github.com/luxfi/metric v1.5.7 // indirect
|
||||
github.com/luxfi/mock v0.1.1 // indirect
|
||||
github.com/luxfi/sampler v1.1.0 // indirect
|
||||
github.com/luxfi/vm v1.2.0 // indirect
|
||||
github.com/klauspost/compress v1.18.0 // indirect
|
||||
github.com/luxfi/cache v1.0.0 // indirect
|
||||
github.com/luxfi/consensus v1.22.35 // indirect
|
||||
github.com/luxfi/math v1.0.2 // indirect
|
||||
github.com/luxfi/mock v0.1.0 // indirect
|
||||
github.com/luxfi/utils v1.0.0 // indirect
|
||||
github.com/mr-tron/base58 v1.2.0 // indirect
|
||||
github.com/supranational/blst v0.3.16 // indirect
|
||||
go.uber.org/mock v0.6.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect
|
||||
golang.org/x/sys v0.45.0 // indirect
|
||||
gonum.org/v1/gonum v0.17.0 // indirect
|
||||
google.golang.org/protobuf v1.36.11 // indirect
|
||||
golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b // indirect
|
||||
golang.org/x/sys v0.39.0 // indirect
|
||||
gonum.org/v1/gonum v0.16.0 // indirect
|
||||
)
|
||||
|
||||
@@ -22,8 +22,8 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku
|
||||
github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
|
||||
github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY=
|
||||
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
|
||||
github.com/cloudflare/circl v1.6.3 h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8=
|
||||
github.com/cloudflare/circl v1.6.3/go.mod h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4=
|
||||
github.com/cloudflare/circl v1.6.2-0.20251204010831-23491bd573cf h1:+0huF756d72ZdHxachRP5HYmvRkkOk8CLyKUmJM138c=
|
||||
github.com/cloudflare/circl v1.6.2-0.20251204010831-23491bd573cf/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
|
||||
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
@@ -33,8 +33,8 @@ github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn
|
||||
github.com/decred/dcrd/crypto/blake256 v1.1.0 h1:zPMNGQCm0g4QTY27fOCorQW7EryeQ/U0x++OzVrdms8=
|
||||
github.com/decred/dcrd/crypto/blake256 v1.1.0/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo=
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 h1:5RVFMOWjMyRy8cARdy79nAmgYw3hK/4HUq48LQ6Wwqo=
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40=
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 h1:NMZiJj8QnKe1LgsbDayM4UoHwbvwDRwnI3hwNaAHRnc=
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40=
|
||||
github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
@@ -49,56 +49,36 @@ github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||
github.com/google/renameio/v2 v2.0.0 h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qAhxg=
|
||||
github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4=
|
||||
github.com/gorilla/rpc v1.2.1 h1:yC+LMV5esttgpVvNORL/xX4jvTTEUE30UZhZ5JF7K9k=
|
||||
github.com/gorilla/rpc v1.2.1/go.mod h1:uNpOihAlF5xRFLuTYhfR0yfCTm0WTQSQttkMSptRfGk=
|
||||
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/holiman/uint256 v1.3.2 h1:a9EgMPSC1AAaj1SZL5zIQD3WbwTuHrMGOerLjGmM/TA=
|
||||
github.com/holiman/uint256 v1.3.2/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
||||
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
||||
github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
|
||||
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
|
||||
github.com/luxfi/accel v1.2.4 h1:5VbIHyEvvfobn2zBiTFODxDw1CeqxCepZOLlvkuf9yQ=
|
||||
github.com/luxfi/accel v1.2.4/go.mod h1:ISIwAX+ZfsL/S5nsP2JvfldXN6Nc+QzoWf6Jtaq+xsQ=
|
||||
github.com/luxfi/address v1.0.1 h1:Sc4keyuVzBIvHr7uVeYZf2/WY9YDGUgDi/iiWenj49g=
|
||||
github.com/luxfi/address v1.0.1/go.mod h1:5j3Eh66v9zvv1GbNdZwt+23krV8JlSDaRzmWZU8ZRM0=
|
||||
github.com/luxfi/cache v1.2.1 h1:kAzOS55/hmYeNKR+0HAKv4ma48Y6JjkI8UQeqdZ8bfI=
|
||||
github.com/luxfi/cache v1.2.1/go.mod h1:co7JTxZZHpKT31Yh01LFp5aZOxmoUg157FhBLQdQHVU=
|
||||
github.com/luxfi/constants v1.5.8 h1:iNP9AWNUcM4Tps7jYnx49CwtCWAC9mYRxJfGou2za0g=
|
||||
github.com/luxfi/constants v1.5.8/go.mod h1:Pu5jWHdnUtQRbWC43yTUjU/pbIIKMDOd2a2yroSfo48=
|
||||
github.com/luxfi/container v0.0.4 h1:BXhF82WyfqVP5mjlNcr7tP0Fcnvl0Ap1rkiu+rq5XuM=
|
||||
github.com/luxfi/container v0.0.4/go.mod h1:Z3SpmMF5d4t77MM0nHYXURpn+EMVaeu1fhbd/3BGaek=
|
||||
github.com/luxfi/crypto v1.20.0 h1:JNsQ25sVO6T8XuIHRue4akOpnt5pNmk1xg5hzmU6dNE=
|
||||
github.com/luxfi/crypto v1.20.0/go.mod h1:bLCBuIV/KDjPytld7jSYe1WbfWknPQXcivq88Qo96QU=
|
||||
github.com/luxfi/formatting v1.0.1 h1:ZnE1rAdEUds9yAegdVdGDOBGN6hLMPOv6E03Fp8IEYo=
|
||||
github.com/luxfi/formatting v1.0.1/go.mod h1:mYzNf5DJOiqSSKUPzNj5dKy4tstFbN3pZlkI5716eKc=
|
||||
github.com/luxfi/geth v1.16.98 h1:w187TtKuGStf3tm2bshuHVKBv2Frjx0lT54kQVXyNHA=
|
||||
github.com/luxfi/geth v1.16.98/go.mod h1:6kEzSExdk9CPQDPXALt6P3HfQqBq7KF1Jrrv9gBpxbU=
|
||||
github.com/luxfi/go-bip32 v1.1.0 h1:zjy19WKa1KJnGamRNyOZM3l/MPtV/sax7M4NMPwLHZQ=
|
||||
github.com/luxfi/go-bip32 v1.1.0/go.mod h1:QyDXlzWL3xRiCbMUi4Z3J52Q/SMoCvdRLXXlYvSZor8=
|
||||
github.com/luxfi/go-bip39 v1.2.0 h1:fx3pFuSGawCG4In6pA4OLLStqbgIqD1j8EygFskoHzY=
|
||||
github.com/luxfi/go-bip39 v1.2.0/go.mod h1:if+2OVbG4k4jKIuBt/Rse1KV1kgWQM5j5xFbUtwbNtc=
|
||||
github.com/luxfi/ids v1.3.0 h1:11xnwRDm6zQzbqcRnkFujOYkvhK4Fs/+g+sKRlRUNsU=
|
||||
github.com/luxfi/ids v1.3.0/go.mod h1:6vpdcdZW0qxeade+3xby8aLTutbcJ7O0r8+fNQrksGI=
|
||||
github.com/luxfi/math v1.4.1 h1:1t9bCCsEqnl9yIKrShlbs80DBKyYTWdnzkVfBqEeO7Q=
|
||||
github.com/luxfi/math v1.4.1/go.mod h1:QvbRxauQyE1w4lvbcLSe6c8yeJz2Zj1Bq1rayGgs2tA=
|
||||
github.com/luxfi/math/big v0.1.0 h1:Vz4c0RsZVPdIKPsHPgAJChH/R3p15WHRUz7LkLf+NIQ=
|
||||
github.com/luxfi/math/big v0.1.0/go.mod h1:BuxSu22RbO93xBLk5Eam5nldFponoJ73xDFz4uJ3Huk=
|
||||
github.com/luxfi/metric v1.5.7 h1:LoSPEUpak2SLcynF+LT2cXjl9ECp4nY+Lia9zudmDv4=
|
||||
github.com/luxfi/metric v1.5.7/go.mod h1:CMguEhyuLi4YUWyXimJ+UHply99BDFrL0pxedB7rBqM=
|
||||
github.com/luxfi/mock v0.1.1 h1:0HEtIjg1J6CWz+IUyP6rsGqNWTcmxjFnSQIhaDuARwY=
|
||||
github.com/luxfi/mock v0.1.1/go.mod h1:jo35akl3Vtd8LbzDts8VJ0jmSVycrd1/eBi6g6t5hKU=
|
||||
github.com/luxfi/protocol v0.0.2 h1:TAuXMm1K4VDpG3B3brq1EE9Lb7XlbhQmVBObskgNhmc=
|
||||
github.com/luxfi/protocol v0.0.2/go.mod h1:Yjn2VRwn5PXim0+JTalAyrVG6YbmuSnYOfeUXSbAsqA=
|
||||
github.com/luxfi/sampler v1.1.0 h1:u3iRDl7V06ARh0e85h3HT+aZ1saCFo2yMMsh+dCJbqk=
|
||||
github.com/luxfi/sampler v1.1.0/go.mod h1:kJa53S3tC9+VSbuV3RFu68MmbCCBlr2UM39LOClQ/Hs=
|
||||
github.com/luxfi/tls v1.0.3 h1:rK3nxSAxrUOOSHOZnKChwV4f6UJ+cfOl8KWJXAQx/SI=
|
||||
github.com/luxfi/tls v1.0.3/go.mod h1:dQqSiGE7YxXUxOwICoReUuIitBms9DYOaCeteBwmIWw=
|
||||
github.com/luxfi/vm v1.2.0 h1:jTwQRHdC9VmyRZTPSn+IqjMju7f6xlxLc6P9CEg+Y2M=
|
||||
github.com/luxfi/vm v1.2.0/go.mod h1:qasVIBRerVQuvy9vFGrX3H8X8pPMPG5un/KbZSyq5YY=
|
||||
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
|
||||
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
|
||||
github.com/luxfi/cache v1.0.0 h1:OcqGi/qs9ky+7O8fR6WMZtFsunvA40LBTg3QRQqJurs=
|
||||
github.com/luxfi/cache v1.0.0/go.mod h1:BEvpffvV3SXs/KSa9nUC1TszxKwUdIHwIaoXpeiYU+Y=
|
||||
github.com/luxfi/consensus v1.22.35 h1:ZJOEITtoy5pT9OkT+z+9qulbsVNFdcdsUAibCtXSoF4=
|
||||
github.com/luxfi/consensus v1.22.35/go.mod h1:/sNvvKfESWfq57Jmrf22T2GquLNg6PU9m9MJ3wqfoYU=
|
||||
github.com/luxfi/constants v1.2.3 h1:ewo3Ch6AJDI3G42J0rlNAdZU1Fv96YEyOmp3E2K/pzE=
|
||||
github.com/luxfi/constants v1.2.3/go.mod h1:r5WL5Z03I9iHo910pHykO+RuDCwe4jy0rBSueG1l1mo=
|
||||
github.com/luxfi/crypto v1.17.25 h1:emTejQ17bGj/1tu0ETB196Hbn6fJfo8wUNGIOWit6RM=
|
||||
github.com/luxfi/crypto v1.17.25/go.mod h1:v6eaW5ejuzW2gecChWKQqx4CtVhoM1b+e40ro/6WVPg=
|
||||
github.com/luxfi/ids v1.2.4 h1:e0OaeSI6xWjS9JnxxxfvCCs9HHDUrwDc3M9ctIhjcDI=
|
||||
github.com/luxfi/ids v1.2.4/go.mod h1:HwvRJSNbuZS+u+0JqeHfPX2S13iFyLCnfGxjBCmt244=
|
||||
github.com/luxfi/math v1.0.2 h1:bgBGmVC7S/QxLCgAJZJdvjFHMNXygcApcKofIn7bWpU=
|
||||
github.com/luxfi/math v1.0.2/go.mod h1:2Jk1/s0f0yN2q0Sx/cBExbFJz7IDEbjxlP3VUiaujms=
|
||||
github.com/luxfi/mock v0.1.0 h1:IwElfNu+T9sXvzFX6tudPDx1vqPuACRSRdxpD5lxW+o=
|
||||
github.com/luxfi/mock v0.1.0/go.mod h1:izF+9K0gGzFC9zERn6Po37v46eLdPB+EIsDjL3GLk+U=
|
||||
github.com/luxfi/node v1.22.37 h1:njIPH9hmX+TphoxsjSEEWtICfrPxfu4/3ak4zg6A8kM=
|
||||
github.com/luxfi/node v1.22.37/go.mod h1:d31vDerMnDBlid/YmKz1M+i/hBfBismLQn4jR8UAFeQ=
|
||||
github.com/luxfi/utils v1.0.0 h1:eibxyw/xkwnB9KRSmYvKLbdLTUElyfJpxLIBeTBKqlU=
|
||||
github.com/luxfi/utils v1.0.0/go.mod h1:ABqhBdGNig0CaDcnNYldv1byS0BTNi5IKPbJSPF1p98=
|
||||
github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
|
||||
github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
|
||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||
@@ -113,6 +93,8 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/sanity-io/litter v1.5.5 h1:iE+sBxPBzoK6uaEP5Lt3fHNgpKcHXc/A2HGETy0uJQo=
|
||||
github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
@@ -125,15 +107,17 @@ github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD
|
||||
github.com/supranational/blst v0.3.16 h1:bTDadT+3fK497EvLdWRQEjiGnUtzJ7jjIUMF0jqwYhE=
|
||||
github.com/supranational/blst v0.3.16/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw=
|
||||
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc=
|
||||
github.com/thepudds/fzgen v0.4.3 h1:srUP/34BulQaEwPP/uHZkdjUcUjIzL7Jkf4CBVryiP8=
|
||||
github.com/thepudds/fzgen v0.4.3/go.mod h1:BhhwtRhzgvLWAjjcHDJ9pEiLD2Z9hrVIFjBCHJ//zJ4=
|
||||
go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y=
|
||||
go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU=
|
||||
golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988=
|
||||
golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc=
|
||||
golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 h1:jiDhWWeC7jfWqR9c/uplMOqJ0sbNlNWv0UkzE0vX1MA=
|
||||
golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90/go.mod h1:xE1HEv6b+1SCZ5/uscMRjUBKtIxworgEcEi+/n9NQDQ=
|
||||
golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
|
||||
golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
|
||||
golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b h1:DXr+pvt3nC887026GRP39Ej11UATqWDmWuS99x26cD0=
|
||||
golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b/go.mod h1:4QTo5u+SEIbbKW1RacMZq1YEfOBqeXa19JeshGi+zc4=
|
||||
golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
@@ -149,24 +133,22 @@ golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY=
|
||||
golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
|
||||
golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
|
||||
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
|
||||
gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
|
||||
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
|
||||
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
|
||||
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||
|
||||
@@ -10,22 +10,19 @@ package keys
|
||||
|
||||
import (
|
||||
"crypto/ecdsa"
|
||||
"crypto/elliptic"
|
||||
"encoding/base64"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"math/big"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/luxfi/crypto/bls"
|
||||
"github.com/luxfi/crypto/bls/signer/localsigner"
|
||||
luxcrypto "github.com/luxfi/crypto/secp256k1"
|
||||
"github.com/luxfi/go-bip32"
|
||||
"github.com/luxfi/go-bip39"
|
||||
"github.com/luxfi/ids"
|
||||
"github.com/luxfi/protocol/p/signer"
|
||||
luxtls "github.com/luxfi/tls"
|
||||
"github.com/luxfi/node/staking"
|
||||
"github.com/luxfi/node/vms/platformvm/signer"
|
||||
"golang.org/x/crypto/sha3"
|
||||
)
|
||||
|
||||
@@ -75,7 +72,7 @@ func GenerateValidatorKey() (*ValidatorKey, error) {
|
||||
vk := &ValidatorKey{}
|
||||
|
||||
// 1. Generate TLS staking key
|
||||
certPEM, keyPEM, err := luxtls.NewCertAndKeyBytes()
|
||||
certPEM, keyPEM, err := staking.NewCertAndKeyBytes()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to generate TLS cert: %w", err)
|
||||
}
|
||||
@@ -84,7 +81,7 @@ func GenerateValidatorKey() (*ValidatorKey, error) {
|
||||
vk.StakerKey = keyPEM
|
||||
|
||||
// Parse cert to derive NodeID
|
||||
tlsCert, err := luxtls.LoadTLSCertFromBytes(keyPEM, certPEM)
|
||||
tlsCert, err := staking.LoadTLSCertFromBytes(keyPEM, certPEM)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to parse TLS cert: %w", err)
|
||||
}
|
||||
@@ -214,46 +211,32 @@ func (ks *KeyStore) Load(name string) (*ValidatorKey, error) {
|
||||
func LoadFromDir(nodeDir string) (*ValidatorKey, error) {
|
||||
vk := &ValidatorKey{}
|
||||
|
||||
// Load TLS cert - try modern path first, then legacy
|
||||
// Load TLS cert - try modern path first
|
||||
certPath := filepath.Join(nodeDir, "staking", "staker.crt")
|
||||
certPEM, err := os.ReadFile(certPath)
|
||||
if err != nil {
|
||||
certPath = filepath.Join(nodeDir, "staker.crt")
|
||||
certPEM, err = os.ReadFile(certPath)
|
||||
}
|
||||
|
||||
// Load TLS key
|
||||
keyPath := filepath.Join(nodeDir, "staking", "staker.key")
|
||||
keyPEM, kerr := os.ReadFile(keyPath)
|
||||
if kerr != nil {
|
||||
keyPath = filepath.Join(nodeDir, "staker.key")
|
||||
keyPEM, kerr = os.ReadFile(keyPath)
|
||||
}
|
||||
|
||||
// If TLS cert/key missing, generate them and persist
|
||||
if err != nil || kerr != nil || len(certPEM) == 0 || len(keyPEM) == 0 {
|
||||
fmt.Printf(" Generating TLS staking cert for %s\n", filepath.Base(nodeDir))
|
||||
certPEM, keyPEM, err = luxtls.NewCertAndKeyBytes()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to generate TLS cert: %w", err)
|
||||
}
|
||||
// Save to disk for future use
|
||||
stakingDir := filepath.Join(nodeDir, "staking")
|
||||
if err := os.MkdirAll(stakingDir, 0700); err != nil {
|
||||
return nil, fmt.Errorf("failed to create staking dir: %w", err)
|
||||
}
|
||||
if err := os.WriteFile(filepath.Join(stakingDir, "staker.key"), keyPEM, 0600); err != nil {
|
||||
return nil, fmt.Errorf("failed to write staker.key: %w", err)
|
||||
}
|
||||
if err := os.WriteFile(filepath.Join(stakingDir, "staker.crt"), certPEM, 0644); err != nil {
|
||||
return nil, fmt.Errorf("failed to write staker.crt: %w", err)
|
||||
return nil, fmt.Errorf("failed to read staker.crt: %w", err)
|
||||
}
|
||||
}
|
||||
vk.StakerCert = certPEM
|
||||
|
||||
// Load TLS key
|
||||
keyPath := filepath.Join(nodeDir, "staking", "staker.key")
|
||||
keyPEM, err := os.ReadFile(keyPath)
|
||||
if err != nil {
|
||||
keyPath = filepath.Join(nodeDir, "staker.key")
|
||||
keyPEM, err = os.ReadFile(keyPath)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to read staker.key: %w", err)
|
||||
}
|
||||
}
|
||||
vk.StakerKey = keyPEM
|
||||
|
||||
// Derive NodeID from TLS cert
|
||||
tlsCert, err := luxtls.LoadTLSCertFromBytes(keyPEM, certPEM)
|
||||
tlsCert, err := staking.LoadTLSCertFromBytes(keyPEM, certPEM)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load TLS cert: %w", err)
|
||||
}
|
||||
@@ -272,15 +255,13 @@ func LoadFromDir(nodeDir string) (*ValidatorKey, error) {
|
||||
}
|
||||
if len(signerBytes) > 0 {
|
||||
vk.BLSSecretKey = signerBytes
|
||||
// Derive public key and PoP using localsigner + signer.NewProofOfPossession
|
||||
// This must match how keys are generated in GenerateValidatorKey/DeriveValidatorFromMnemonic
|
||||
blsSigner, err := localsigner.FromBytes(signerBytes)
|
||||
// Derive public key and PoP
|
||||
sk, err := bls.SecretKeyFromBytes(signerBytes)
|
||||
if err == nil {
|
||||
pop, err := signer.NewProofOfPossession(blsSigner)
|
||||
if err == nil {
|
||||
vk.BLSPublicKey = pop.PublicKey[:]
|
||||
vk.BLSPoP = pop.ProofOfPossession[:]
|
||||
}
|
||||
pk := bls.PublicFromSecretKey(sk)
|
||||
vk.BLSPublicKey = bls.PublicKeyToCompressedBytes(pk)
|
||||
sig := bls.Sign(sk, vk.BLSPublicKey)
|
||||
vk.BLSPoP = bls.SignatureToBytes(sig)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -328,16 +309,7 @@ func (ks *KeyStore) List() ([]string, error) {
|
||||
var names []string
|
||||
for _, entry := range entries {
|
||||
if entry.IsDir() {
|
||||
name := entry.Name()
|
||||
// Skip hidden directories (like .git) and non-node directories
|
||||
if strings.HasPrefix(name, ".") {
|
||||
continue
|
||||
}
|
||||
// Only include node* directories
|
||||
if !strings.HasPrefix(name, "node") {
|
||||
continue
|
||||
}
|
||||
names = append(names, name)
|
||||
names = append(names, entry.Name())
|
||||
}
|
||||
}
|
||||
return names, nil
|
||||
@@ -398,226 +370,3 @@ func (vk *ValidatorKey) BLSPoPHex() string {
|
||||
func (vk *ValidatorKey) CChainAddrHex() string {
|
||||
return "0x" + hex.EncodeToString(vk.CChainAddr[:])
|
||||
}
|
||||
|
||||
// DeriveValidatorsFromMnemonic derives N validator keys from a BIP39 mnemonic.
|
||||
// Each validator uses BIP44 path m/44'/60'/0'/0/{index} for the EC key.
|
||||
// TLS staking certs and BLS keys are generated fresh (not deterministic from mnemonic).
|
||||
// This is designed for runtime use - no files are written to disk.
|
||||
func DeriveValidatorsFromMnemonic(mnemonic string, count int) ([]*ValidatorKey, error) {
|
||||
if count <= 0 || count > 100 {
|
||||
return nil, fmt.Errorf("invalid validator count: %d (must be 1-100)", count)
|
||||
}
|
||||
|
||||
validators := make([]*ValidatorKey, count)
|
||||
|
||||
for i := 0; i < count; i++ {
|
||||
vk, err := DeriveValidatorFromMnemonic(mnemonic, uint32(i))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to derive validator %d: %w", i, err)
|
||||
}
|
||||
validators[i] = vk
|
||||
}
|
||||
|
||||
return validators, nil
|
||||
}
|
||||
|
||||
// DeriveValidatorFromMnemonic derives a single validator key from mnemonic at given index.
|
||||
// All keys (EC, TLS, BLS) are now derived deterministically from the mnemonic.
|
||||
func DeriveValidatorFromMnemonic(mnemonic string, accountIndex uint32) (*ValidatorKey, error) {
|
||||
vk := &ValidatorKey{}
|
||||
|
||||
// 1. Derive EC key from mnemonic using BIP44 path m/44'/60'/0'/0/{index}
|
||||
ecKeyBytes, err := deriveMnemonicKey(mnemonic, accountIndex)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to derive EC key: %w", err)
|
||||
}
|
||||
vk.ECPrivateKey = ecKeyBytes
|
||||
|
||||
// Derive P-chain and C-chain addresses
|
||||
luxPrivKey, err := luxcrypto.ToPrivateKey(ecKeyBytes)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create secp256k1 key: %w", err)
|
||||
}
|
||||
pubKey := luxPrivKey.PublicKey()
|
||||
vk.PChainAddr = ids.ShortID(pubKey.Address())
|
||||
vk.CChainAddr = pubkeyToAddress(pubKey.ToECDSA())
|
||||
|
||||
// 2. Derive TLS staking cert deterministically from mnemonic
|
||||
// Use a separate derivation path: m/44'/60'/1'/0/{index} for TLS keys
|
||||
tlsKeyBytes, err := deriveMnemonicKeyForPath(mnemonic, 1, accountIndex) // account=1 for TLS
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to derive TLS key seed: %w", err)
|
||||
}
|
||||
|
||||
// Create P-256 private key from derived seed (TLS uses P-256, not secp256k1)
|
||||
p256Key, err := deriveP256Key(tlsKeyBytes)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to derive P-256 key: %w", err)
|
||||
}
|
||||
|
||||
certPEM, keyPEM, err := luxtls.NewCertAndKeyBytesFromKey(p256Key)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to generate TLS cert: %w", err)
|
||||
}
|
||||
vk.StakerCert = certPEM
|
||||
vk.StakerKey = keyPEM
|
||||
|
||||
// Derive NodeID from TLS cert
|
||||
tlsCert, err := luxtls.LoadTLSCertFromBytes(keyPEM, certPEM)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to parse TLS cert: %w", err)
|
||||
}
|
||||
stakingCert := &ids.Certificate{
|
||||
Raw: tlsCert.Leaf.Raw,
|
||||
PublicKey: tlsCert.Leaf.PublicKey,
|
||||
}
|
||||
vk.NodeID = ids.NodeIDFromCert(stakingCert)
|
||||
|
||||
// 3. Derive BLS signer key deterministically from mnemonic
|
||||
// Use a separate derivation path: m/44'/60'/2'/0/{index} for BLS keys
|
||||
blsSeed, err := deriveMnemonicKeyForPath(mnemonic, 2, accountIndex) // account=2 for BLS
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to derive BLS key seed: %w", err)
|
||||
}
|
||||
|
||||
// Create BLS signer from seed using proper BLS key derivation (handles field order internally)
|
||||
blsKey, err := localsigner.FromSeed(blsSeed)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create BLS key from seed: %w", err)
|
||||
}
|
||||
vk.BLSSecretKey = blsKey.ToBytes()
|
||||
|
||||
pop, err := signer.NewProofOfPossession(blsKey)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to generate BLS PoP: %w", err)
|
||||
}
|
||||
vk.BLSPublicKey = pop.PublicKey[:]
|
||||
vk.BLSPoP = pop.ProofOfPossession[:]
|
||||
|
||||
return vk, nil
|
||||
}
|
||||
|
||||
// deriveP256Key creates an ECDSA P-256 private key from a 32-byte seed.
|
||||
// This allows deterministic TLS key generation from mnemonic-derived seeds.
|
||||
func deriveP256Key(seed []byte) (*ecdsa.PrivateKey, error) {
|
||||
if len(seed) < 32 {
|
||||
return nil, fmt.Errorf("seed must be at least 32 bytes")
|
||||
}
|
||||
|
||||
// Use the seed as the private key scalar (reduced mod curve order)
|
||||
curve := elliptic.P256()
|
||||
k := new(big.Int).SetBytes(seed[:32])
|
||||
k.Mod(k, curve.Params().N)
|
||||
|
||||
// Ensure k is not zero
|
||||
if k.Sign() == 0 {
|
||||
k.SetInt64(1)
|
||||
}
|
||||
|
||||
priv := &ecdsa.PrivateKey{
|
||||
PublicKey: ecdsa.PublicKey{
|
||||
Curve: curve,
|
||||
},
|
||||
D: k,
|
||||
}
|
||||
priv.PublicKey.X, priv.PublicKey.Y = curve.ScalarBaseMult(k.Bytes())
|
||||
|
||||
return priv, nil
|
||||
}
|
||||
|
||||
// deriveMnemonicKeyForPath derives a key using BIP44 path m/44'/60'/{account}'/0/{index}
|
||||
func deriveMnemonicKeyForPath(mnemonic string, account, index uint32) ([]byte, error) {
|
||||
if !bip39.IsMnemonicValid(mnemonic) {
|
||||
return nil, fmt.Errorf("invalid mnemonic phrase")
|
||||
}
|
||||
seed := bip39.NewSeed(mnemonic, "")
|
||||
|
||||
// Create master key from seed
|
||||
masterKey, err := bip32.NewMasterKey(seed)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create master key: %w", err)
|
||||
}
|
||||
|
||||
// BIP-44 path: m/44'/60'/{account}'/0/{index}
|
||||
// m/44' (purpose)
|
||||
key, err := masterKey.NewChildKey(bip32.FirstHardenedChild + 44)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to derive purpose: %w", err)
|
||||
}
|
||||
|
||||
// m/44'/60' (coin type for LUX)
|
||||
key, err = key.NewChildKey(bip32.FirstHardenedChild + LUXCoinType)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to derive coin type: %w", err)
|
||||
}
|
||||
|
||||
// m/44'/60'/{account}' (account - 0=EC, 1=TLS, 2=BLS)
|
||||
key, err = key.NewChildKey(bip32.FirstHardenedChild + account)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to derive account: %w", err)
|
||||
}
|
||||
|
||||
// m/44'/60'/{account}'/0 (change)
|
||||
key, err = key.NewChildKey(0)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to derive change: %w", err)
|
||||
}
|
||||
|
||||
// m/44'/60'/{account}'/0/{index} (address index)
|
||||
key, err = key.NewChildKey(index)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to derive address index: %w", err)
|
||||
}
|
||||
|
||||
return key.Key, nil
|
||||
}
|
||||
|
||||
// LUXCoinType is the BIP-44 coin type for LUX (60' = standard Ethereum)
|
||||
const LUXCoinType = 60
|
||||
|
||||
// deriveMnemonicKey derives an EC private key from mnemonic using BIP44 path m/44'/60'/0'/0/{index}
|
||||
func deriveMnemonicKey(mnemonic string, accountIndex uint32) ([]byte, error) {
|
||||
if !bip39.IsMnemonicValid(mnemonic) {
|
||||
return nil, fmt.Errorf("invalid mnemonic phrase")
|
||||
}
|
||||
seed := bip39.NewSeed(mnemonic, "")
|
||||
|
||||
// Create master key from seed
|
||||
masterKey, err := bip32.NewMasterKey(seed)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create master key: %w", err)
|
||||
}
|
||||
|
||||
// BIP-44 path: m/44'/60'/0'/0/{accountIndex}
|
||||
// m/44' (purpose)
|
||||
key, err := masterKey.NewChildKey(bip32.FirstHardenedChild + 44)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to derive purpose: %w", err)
|
||||
}
|
||||
|
||||
// m/44'/60' (coin type for LUX)
|
||||
key, err = key.NewChildKey(bip32.FirstHardenedChild + LUXCoinType)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to derive coin type: %w", err)
|
||||
}
|
||||
|
||||
// m/44'/60'/0' (account)
|
||||
key, err = key.NewChildKey(bip32.FirstHardenedChild + 0)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to derive account: %w", err)
|
||||
}
|
||||
|
||||
// m/44'/60'/0'/0 (change)
|
||||
key, err = key.NewChildKey(0)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to derive change: %w", err)
|
||||
}
|
||||
|
||||
// m/44'/60'/0'/0/{accountIndex} (address index)
|
||||
key, err = key.NewChildKey(accountIndex)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to derive address index: %w", err)
|
||||
}
|
||||
|
||||
return key.Key, nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"publicKey": "0xb57029264ce3e70b26ebd7c8796ee0a097f878973448716a6a61e3b0243f822aba62665f3a6dd318f688ca1baa9248c5",
|
||||
"proofOfPossession": "0xa4ea78beabc3fdd9b2f6be1204f8c63a2ee0452ab7ea0977c102714f6a4d3a50c6bcb51e8fcb97fab51a4f4649c3367b10fde7b6960bfb7fc2785c6fb77a65dcd448ddf5533914930c919a296253c6dbb25d79443c96309c53dcc3477e553dde"
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"shortID": "9JTuXefKakdPgnHCkvS8Dx6BFMSLJstqU",
|
||||
"ethAddress": "0x5b0e898ee782146c6a871959d4b795f598d01111"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
7236854329f113eefaeb2ee835451f889eedbf4786b73dd6fa13ef5f6b9017cc
|
||||
@@ -0,0 +1,29 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFCzCCAvOgAwIBAgIUf4jw7QyIXSSdcB6OFcMUYVaDjM8wDQYJKoZIhvcNAQEL
|
||||
BQAwFTETMBEGA1UEAwwKbHV4ZC1ub2RlMTAeFw0yNTExMjgwNzAzNTFaFw0zNTEx
|
||||
MjYwNzAzNTFaMBUxEzARBgNVBAMMCmx1eGQtbm9kZTEwggIiMA0GCSqGSIb3DQEB
|
||||
AQUAA4ICDwAwggIKAoICAQC6XVi8QY5+YKLhGzcWQ4VdcX9apHYeZHXK1eocnPM7
|
||||
ul1T94aNCnaKkCXnkaXckQoXHaq7FIVNGmO/47EZrCInlIPeols2dzPTC1Aeb/NW
|
||||
Xucwrgz1CySyTs/KLewwtL3mzTAtcD+gwHJekL0Y4gngqBLERr+veQwx26RHEXGy
|
||||
6364dkMBVxo1YLjxglTkluaMOTn8dj93WUAeZOGruYNqiEtysE1JMCzt+okICryP
|
||||
jFSuabJlA6s+xeUCW+UY+nE3CnsVvycGOeRpeiqlfk7PrZ4RSCyRjwU5mQKQnB90
|
||||
dvH71Q+P1OO48oW4YDewO0gTgQtFa9pvCTpxwMd7z1ApnvFZRQDGAmU6CekW9n5V
|
||||
mDAnU6C/1/BJUjqcrsMHczR8OcLd7g3k8AAjWYQ2taPU8vTKVxeYuS2X/GIdx+sK
|
||||
utVBRYemE2cwRBYKBTymvgDH872fig3b2pkCEl0CCF/sxt/DRrUD+M5YnXqhH29s
|
||||
OGWsNIdk+BIYgIMjZ0Pd65ZdFR5KEI2BFCvkFXi51rSNjUkQY3yL5WDp1p7931FN
|
||||
VzR+Z+gRR0SxrVcOe4Nr7DAHqRzwHNXcjndOt6xbZ3M37ybr9YOGMUHqkqgNc6R7
|
||||
//QL43J91Ib8g7DhP3e98U7agGtevPZnkXJpqvgG5HZxOtwe+huDvEAVmwu6kUe9
|
||||
QwIDAQABo1MwUTAdBgNVHQ4EFgQUtz6WTh3KhUniCncO6WQG/jQR/PgwHwYDVR0j
|
||||
BBgwFoAUtz6WTh3KhUniCncO6WQG/jQR/PgwDwYDVR0TAQH/BAUwAwEB/zANBgkq
|
||||
hkiG9w0BAQsFAAOCAgEAAVGm3Lg+CFc+hlOriIvTvn2HHvh2ZszdUTS8AIg9PcXt
|
||||
KbTOhc/BraF1wgPZk93Lhxu7i8MtW9akEL5PYxoJtan2U2qHIh8qWkz5Dc9Yd2dF
|
||||
rsxfnZ8qN3nY2fJ3pwzV7qXyuCE57PgFEJ0npc8pGWCkumKJUx3Y0ojaM0yN2rO8
|
||||
377lO4EQx96hfFA+ONDY9pERcgJCKpW+j8MgWfVlzYmeKT+xrHsBWAHWsDrOGdCP
|
||||
RCzgI2/esZEoDkBcd/gc8zw5yB8RlBDYZigs41EyPhPDqygGpeimIyDYh8BhpwgE
|
||||
bb52zmC9Nz6xhC/svtfp2MB7PsE3b21O5CY+7MfhyKkGtBF4dpgYwDPyvh/QMnQ+
|
||||
IsMbRNpjUUioH66wEx4I3HC9ThBsBOq4PXsdwyRNXX2oSkK1vtSeL465ZXpRvvql
|
||||
TL/uYKw+umy0/PzeMkX0ptCJ+d4Gb/CG2DozGf1G5aTfO/N4kumOAr2SeWAaRuxO
|
||||
l9fnS3/ZgM/Jyxsvc7viiWSrzvzag21ge8BD7sjcK5lSUXMIeOJHi6VTozIER6yY
|
||||
eDWvxv0TrXZ8HpfssRgjSpHK8DdsuXY9pjWXnqNYvWSNXzIctGkGyY3m8B22Lv1q
|
||||
vVGI5NZEEKC9lGJjUW/L3r6tZWIhcl1RQkXFhizRocr5c8HnWTkcCmt7/IUGMww=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
nyZ9gWVMobFQ+ahUL/S9+V5WjgiXYBo=
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"publicKey": "0xa8c919018cece3848005a5ccb70239bd9d7e4847ca3a5509e0038be4be3ef2bf4c448b838e1a6f64a72face134c0300d",
|
||||
"proofOfPossession": "0xa665d53d4e5a56883799004ff6afb2d8f8b075bb51aad0568bb6e2dd27afb676bf93d0559481c69088205edafffafa090c470af7888e19c7ce29be2a9e5f261c8216c6d4e8bec3bf0a07f15b3731721c2f1a4e551b56eb729d33ba28ecbe7b93"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
�vf
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"shortID": "9m1xuPkzW483uoqwoYjH2H3Y4ehAWmQhA",
|
||||
"ethAddress": "0x60141cf8c087c8200f460d1eea3141039f8431f2"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
24434a5d11e33bb2cfd9f15bde669bdbf6dc75d1475a842585a1bfdbb8bc31d3
|
||||
@@ -0,0 +1,29 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFCzCCAvOgAwIBAgIUGOdxBB1TcqNegg4jzGARyOAcEaIwDQYJKoZIhvcNAQEL
|
||||
BQAwFTETMBEGA1UEAwwKbHV4ZC1ub2RlMjAeFw0yNTExMjgwNzAzNTFaFw0zNTEx
|
||||
MjYwNzAzNTFaMBUxEzARBgNVBAMMCmx1eGQtbm9kZTIwggIiMA0GCSqGSIb3DQEB
|
||||
AQUAA4ICDwAwggIKAoICAQCtEqoygvTDq0ud9T4VcGU7VTg0rBincIJbr+g6a6XR
|
||||
R2s3Nc3RSV6crB/diK4zpLjaLT+h4SAZ1fae5TzfdUImClys8RIEepnrEueBzrw0
|
||||
teg9Wj06ekAxlnzkQPPoCVtXFA9cl10c9kfdEZGrm/QByhNpVsirdPaimZsAOanJ
|
||||
wz1sly461pjr1yl6omaczMaRVA+o/Jj7K8n2R4760usk4UcAejVOJVdBwLHE4UWk
|
||||
ZK0iAZNVEb/HD03z/XIw7AZBFnBAauopD/z22wXagby+p5Ydx3tGhyDDgKZrIYyS
|
||||
aaIjDLOFGuJRwGPc3BSyNmv1+kd95x2CSElRGCHeCAQvmbhxQLmdj0MOsH2yXqV9
|
||||
7z3ieOzbGTkhuwN6//QNf0/YQxEZeJDMdCdZkMlMuwGiQ9HV0ZvGIkhVKZGW9JF5
|
||||
y+47cHHHReZ2eznr21bIDWklWkGJizcOEy8uU6z4sRBtRxjKP72BGWX06A/6GwCM
|
||||
2bo2UP+ctk1wLbymtHUR/lw/OhbcMlz7wEPz5F7xPUCy9/FhEMFIDGqSOpOrOLUd
|
||||
lI4iRNB/fIx6Za6Vt/DtLkSy/zNESUnV/9q/NCqo9eLatBR/wM2yRxRXyKTvp8/t
|
||||
+Z7pwRLaaCQGS08iPfaF42l8/6sYqEwjSJ04INTgaHlLoXgbzG/nIpqv7Ha9EQa/
|
||||
IwIDAQABo1MwUTAdBgNVHQ4EFgQUzNbtEaDEVz1tOzosVjz3qSObFrUwHwYDVR0j
|
||||
BBgwFoAUzNbtEaDEVz1tOzosVjz3qSObFrUwDwYDVR0TAQH/BAUwAwEB/zANBgkq
|
||||
hkiG9w0BAQsFAAOCAgEAWtmljUPOGoARl9XsbYpckg517li4mYd7+v5eIyN6NTIg
|
||||
NRYVIEtsDvEggI5PFSYjOfc5DZSYT0tI7JIEjxp1W4VOPbdchWmc8O33lr7viFR4
|
||||
ATU3JzXBGgxRyj491X/rTdEuQJy3szHm90MRM3FkQ9YfRzMzzyB+Ciu8p4rfR36x
|
||||
T7b6GihgV1mbYK+mlM8X6m6iOJ1lV30ODzWsNvi3ICjxRqTq0IoXJBYSTtA887e5
|
||||
7QvJuENryBaWlyM58tkhYsyFOTO18Pxqfivfd7UFwTyicOJVLUjOhzPX3hXKVDcr
|
||||
jVVoD1OlVwm26510CVZSj8HNbh9knS2CBKvwdEPmv+tZgTVjDLc0CdaEJK6a5T1O
|
||||
/YetsymTgSr55ouNxTjy+iPd49CTfqiVNhx2Wkf2pZ9W6e2zwOM0wRp1vdomhN77
|
||||
g4tbist7ntqq5j37MDEahsFg8KpbLyZRKwD2NlxxTcFyGAi2QpacVljcciTWuvHf
|
||||
qmjYaitaVHDDxz2tsiaVgJGHpqfDwIXBr3DeEGMbmqsv2d2oSVNELeBtQQj+cbIU
|
||||
d7tbCMyTr+KP7P5ykhuDqJIQSIDXD4d3EkfsfwZHOSGhtwrTxLj59+519dsYasOw
|
||||
bpbNv4vWe0RNmOYEThkdAK3CAufn3IiZdX5x6Da/SdlwIbpkuAvEMa1Hp1kIuO4=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
shQvDtSVsjN+gRiCxB5FfNKBrZX4KQ==
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"publicKey": "0x8311f8eb155c17c3331fe16b1ead106d79674ed56979df1188fad111af4bc632d1d9bccf8dcc63a314d8b3cd6e015c8a",
|
||||
"proofOfPossession": "0x80eed5ca57a1ed4a07f65e9661cce582fcab20e3703f8db4f6d322ee871c6d13ca736d564c72170f55f3cc5b1f992f4310888a5c65fba9bd6a72ddb36917794a1fe4762f71776acc514000224cf418ef5ffcd00fb67c3e72a6228db606334e08"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
—yáZþ啈_u9÷,y¼ÚûQpüõfúûñY�Ñ7
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"shortID": "NNwuwoJyg8Hv1EgG7zEUVW6UrXvSfKR89",
|
||||
"ethAddress": "0xea813730ce492f9bf64c47ff761ef093b51a70e0"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
55726f076817eba7f7d838728ed105c57af7ba0cd47e54398715b8bfdcbe33c9
|
||||
@@ -0,0 +1,29 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFCzCCAvOgAwIBAgIULKxJPuOFFwlRrc/yRhzcy6APoxgwDQYJKoZIhvcNAQEL
|
||||
BQAwFTETMBEGA1UEAwwKbHV4ZC1ub2RlMzAeFw0yNTExMjgwNzAzNTFaFw0zNTEx
|
||||
MjYwNzAzNTFaMBUxEzARBgNVBAMMCmx1eGQtbm9kZTMwggIiMA0GCSqGSIb3DQEB
|
||||
AQUAA4ICDwAwggIKAoICAQCmocdiehawg5LEqKtdNilACTKsKa/ARRdPBfWhCHMh
|
||||
vFtpSGHgHSuoCwbIJLNuX3QSbxn3+XbBfjqYEVfr0TC2hfm0swbQ+GcEb/ueomB1
|
||||
dE5HcLg1RWp+4uNiiRxHVRgS0vACtTGp/hI0YNUBHplmn+zf0vCFR58aknrpnC52
|
||||
QKLwldNl0XZ4iKTLUHAUaQ3vPQWF5biSoi7ayY2sQhH0tUf8r08akwL67ROLPwA/
|
||||
/E30uN83RqM1XBnUNBjkjZKnkLKun+3Qhrn9J/NSs4Jl+y/vOAgyEHhF3G53SMyo
|
||||
n25sGciDEtJ2hMcQzgT+F4k+6uuaCzRYDGvVaITeU2sVJQ8HKMZSxaJYruFgDvQ3
|
||||
EsY3yZbbZKubztOm4ggawCoXDVDGyADLfiCzmgqpW2gj6JS8VehhHDD37epQGPKV
|
||||
3ThwCbaIh8xa1OjK1xxXRUKaCxNzzHJk/LBKvdgdsV+TCkhVVn2mD1jy/0uVkkSn
|
||||
3VONCZ2Mj7XBHwWb7MydVS4OCvxBQ85AKZ/wl61IAOiOORAMU0mf/bimDUPsCX5I
|
||||
39og9xQxt9DmMvvBwoJ2V/QsowqGmXx6/7rEBGNfpZIgeSrUgPq0MQz6gLLV7LAw
|
||||
UnQ/kwud4Ri1Efwm3deIKInh9FGeerpvbjjoVKxN2K8hV8Qb5mmeytCQq5tIywYb
|
||||
JwIDAQABo1MwUTAdBgNVHQ4EFgQUrWlrMxWg+rQ8XeRSJ+eRSZf63ZkwHwYDVR0j
|
||||
BBgwFoAUrWlrMxWg+rQ8XeRSJ+eRSZf63ZkwDwYDVR0TAQH/BAUwAwEB/zANBgkq
|
||||
hkiG9w0BAQsFAAOCAgEAKKj8H9f+Bn/ddejeMSVXR2TyBy9ik/q1FYbdUZrzkNrY
|
||||
zM7rP4GfdvsUilFvlHHw2Awhm9SKkwR5oTVs1ucczN81Fz1OrIxaudjVp8u4TRZf
|
||||
KfizRmqo2wlq/2NaMOJTLeBgNsIqr5U1kqEU/Ejo6Wop/Qs53L4oWWYrmnr5ohs1
|
||||
6BUc9JTC/11rOwBnYo1610/VmA9FJ4mD+hYMjdcYT3Uk3uytl9KqXUvUYgQjC4m7
|
||||
gooSfYfuvLP/7ApTjMP1tqk1jNmHVaAC4RhW0FP46p9kzbHAC+a1fCzKmN/gaF1v
|
||||
xQptbYOwfb5MucNo3ENPmyQ3+e++9yCNot+a+re4JHOUNglywd+8m3DiUGEU9aBE
|
||||
1ti05j0H9RtTwHKsCocCa3cwLZSehKCZJvGbubzcSnE7VY1MiyOhS9TCQhHxZFoy
|
||||
1ocH9Pucdj3ZODG0hEiY+zlB5HyQLIdUlBIZD9wsO4PiqgP6a8dZnXPlTvPjirza
|
||||
vzPW/JQ7eyzjxdpsmPy8fLoY9Cr1z8cQHld8EDZAOMzgBgn6DswajcSK24RK1EHa
|
||||
frhX0WVwXu06ifzf9p65d8pxLq+Z04kTI9sLQiNMQCLvC5yCW4vqAtBhoPEy75FE
|
||||
FKOSrvzSocvSFo68+30e0Oh1Q0frptXYUfDWiFGn64oEZLv5Fj46TQE5WWLzmC8=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
R8cuizP3jeF0/RMJgg3Aryxa5SSuvTQ9
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"publicKey": "0xa1efbd891644e1ec9c4f4e423e9a336dfafe551634dd222426734881b80bd80bebf34d06e95da5cf6222735e172ee21a",
|
||||
"proofOfPossession": "0x8db0c22bf8ffc19964eb1d8c952fd0aa7cc12ee44941e3bbcd126bf54b9f90e4becd826819e68d6bb6eb368ce278531618b95e04c09c1eb7cb4a727c5a380c752894621ea3d80888fa11d8eca26e785d97978814e931f6141cf7f1069cda28c0"
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"shortID": "EYrba79gcqhJUqjJjt7aBQnRQCmo4v5zD",
|
||||
"ethAddress": "0x949fee426604137cd94dcf283d01095d533a8a51"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
100b76c3b981a3fceac7d3fc390c55e879431a95da35e3e4577f0e2d3240ef0f
|
||||
@@ -0,0 +1,29 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFCzCCAvOgAwIBAgIULSD9AwR7XQZmsJ2XIh3sXgRiOrwwDQYJKoZIhvcNAQEL
|
||||
BQAwFTETMBEGA1UEAwwKbHV4ZC1ub2RlNDAeFw0yNTExMjgwNzAzNTJaFw0zNTEx
|
||||
MjYwNzAzNTJaMBUxEzARBgNVBAMMCmx1eGQtbm9kZTQwggIiMA0GCSqGSIb3DQEB
|
||||
AQUAA4ICDwAwggIKAoICAQCZaM+DfL0SAYz9ipRxKzprrdSEpztq/Sb15OYeO2st
|
||||
zfxbi8kj1lIOlVV43GRtcjyhiX1aNSVSHHGFLc6rIplKacmCEP0wLDV3G0pPPRq9
|
||||
jtgIH+zbu+GwFbuWPhlMMhJVrsgfRXCfAabfy4Z2J9cMh6cO5XvgmTemR94ik8bk
|
||||
tqBOqNFUC79YdP07dOspRjkh2pCEsaNG8u1f8WNGCUffBtEmbPWytIWE2DQD8zEu
|
||||
hJFCOR3KWwMt9fbR35OW0wiTaCIHE7xX0zMKc+vx/t/vwOWkRZQse7HFjXMwbzv6
|
||||
mt4AXcSkXvbcnGLPi8r8KweVbYFmyXKMCWPxxmg0OaOD9q2e9Bq0LyVHelfCIQZe
|
||||
XJmBaQx50YnH1Unlk2V4YuE5OlSX9bqGlx3Ao1lQZwuV1TSubm3JVaR6Dly87CFT
|
||||
Kdxdz/6np24bySBbGDj4dHS+ys+C9StGqP6sCubcDMKhKzC8S1nQT41WZbR+c90n
|
||||
cLecTH4vrxHeu5cRUzEFgvN56rpsj0X9C4hZQ2Wtq3/rIkgmS29rJMNrlZZXzkJl
|
||||
/MFiBEyRI+1nzCRvI8tU5szunkCoobdVqapjz/bNAmuO0Zdq+mms/84M0PS3b3Wp
|
||||
BJpzOEX4kkOgGHR1D0gdvIUDJ22J9SsB6Rmty8Q9cMc8GsJoKicfjv931UKMsMEM
|
||||
KQIDAQABo1MwUTAdBgNVHQ4EFgQUHCjNScU1x2LwWsIO6Do8bApT8ogwHwYDVR0j
|
||||
BBgwFoAUHCjNScU1x2LwWsIO6Do8bApT8ogwDwYDVR0TAQH/BAUwAwEB/zANBgkq
|
||||
hkiG9w0BAQsFAAOCAgEAPKC9idjXFsyW4GJ5FGwW+gR/aAevDYcDOZ4nBWSbDl7n
|
||||
UZQDWgvZRZmaR7P5gKuAcpbaEF+/rnljShB/9wPliBGdO4EVZw07CH+Km0WfKIKi
|
||||
k6H5VZeOmS8zsueEi+yWGzGAf46Al/KK1T6QSMuO2ZX8NXTskmI6Cl+ZU627aXdy
|
||||
Bb0N2Y6R96fnMb1T44bs8Ck+6XE+KNlHmwzZyzl09X2+6aqFUWPKgAWmWyzCdIN+
|
||||
PS3wALJZrtOGM01qYDBjmEvfUyQkU01N73iPEUKDf8AOST4HbEb6WxNK7j+aGIRx
|
||||
IZJZLgzBf7XPqUvbW8cXKcPI5zbUUEegKKg4scs5Ffp6af9OXejLLntUxeTgtole
|
||||
eASXVKBckijBrwx/qMCjQjpkdxe10SEgN5nMr17+IGHV1obICJylGCi1AMVDxY1+
|
||||
cPtBCEvGI10G5ad109qBY+5PskWJ7pfJm+wChHnTT5ykPDMu1uhQgII+kwMoIwIj
|
||||
9mrCU7doS2HbKtWjnvavxlAYnHef6N7IjQ7HlYxNUv6Hra9/cSCF9xxObt7lH2TB
|
||||
U5lPncQ1eF5XaM3/tXeZLSCwYQyOpnWCwSk5cwTTMhxm2OYPKOIsiLdZ9J5L4/3A
|
||||
yo+4IhnB/zQp+FoBiOuRBfiiv+D6TsvR0/F/h9BDO/sSRhed8LBThdnt7EII59o=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
/+GpDChvhpRV5owqBcU/nI+ciOXEUA==
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"publicKey": "0xa07f54a097a707887321389d1234fad5deb7a694af48224edb4206883a1569b6b3e66338fea993ce691db5a0a9690766",
|
||||
"proofOfPossession": "0xa8430081d55f578c8060b8042b6b3e41d2583c87c1896b72d908b68efb96027ab86fa6ba3ef7f6e22aa4a56abb4eaa69053e7adbab4a292152b94921070e0621ff8948b92bc2aa7641381b20d340be355e42086946e78c2b175441e1e6c43b9a"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
$�Ң}y��������l;[��XK~���H��
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"shortID": "EdQYZENPKXBwFfEBoCE9MithGD2Suawdw",
|
||||
"ethAddress": "0x957c436eb8519f18a2c71191c9534fa8ba53f35f"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
2cb05f96b54a1df2ff17342af9adcbb3aca437b46c0509f132e3ab4982cedbbf
|
||||
@@ -0,0 +1,29 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFCzCCAvOgAwIBAgIUC6uk+uc/QWfe52SWSx0+FVSZkkswDQYJKoZIhvcNAQEL
|
||||
BQAwFTETMBEGA1UEAwwKbHV4ZC1ub2RlNTAeFw0yNTExMjgwNzAzNTJaFw0zNTEx
|
||||
MjYwNzAzNTJaMBUxEzARBgNVBAMMCmx1eGQtbm9kZTUwggIiMA0GCSqGSIb3DQEB
|
||||
AQUAA4ICDwAwggIKAoICAQC7t+g6qnSMKeL8Y011X9VoR/hoUyaC3IxsSh9yrRL0
|
||||
JZMXiOlSnavhwvrHh+qrb1+LS+QoNYhaxKbS356lVRHJC6eQj5Cv9cdOgePklI2s
|
||||
JOUStOii5ZBbJBEIsPdOS8SJCGHYyjv985D2PCm71hSIL3+wy3SGf3ZlZeUFpDAi
|
||||
6BHwOSZ+a3jNiqTKv3D9VVmnIVa3h7w4UuPZPzQmjBWsCiRo/LcFEnAJa1M349Nb
|
||||
K7biLsb/MOTA2M3XGOC6QGEO2yY/0EO5nk0Dm2Hfsj8IrA4lVNQuDANWNVHBQQud
|
||||
UkSNLX0tleSKX+ui7LzxbCxa3yGpVxxoM6A+OXX11HS8fiy9EuKWYT3wE7Rvvayj
|
||||
+uDHLKCMxh9w1TNgnfkISreTo1HLv0ttf1vlHYZ8P6oPbSG4Pb0HwX3k6V81KiGt
|
||||
ntIuXpJ3xS9ieDOR8whbeK+dvRPkYtvhmUrmiFW90RDFSmECVMzbHIz6rbz18eJl
|
||||
/Y1NE5W64PkgrgL2WvIyob5bP5vDDOSmBPd3NobqO4WqAGXIo7+6PK5Jdaj+taj5
|
||||
PQ0bPhG6McYQCTdZcdUpjE+DoNAfQRaQAMAM+EFRCA06uKqc8zrMGfXEezBcVsTK
|
||||
eBKwVVpheNQ56Pj/X4CHM0H6gkgj+MENpdNPaam/EyTkjE3DIQmyIPJ9iTUn9YhT
|
||||
ewIDAQABo1MwUTAdBgNVHQ4EFgQUmArK+xMq1YPD/B6x4lnkeJFQNl0wHwYDVR0j
|
||||
BBgwFoAUmArK+xMq1YPD/B6x4lnkeJFQNl0wDwYDVR0TAQH/BAUwAwEB/zANBgkq
|
||||
hkiG9w0BAQsFAAOCAgEAPmw7kc1rYIsfcYUm0GjuCbn+0ctXwj3xT6TtIuCUETLH
|
||||
CNVsrjWYOjEiu1518JSHJFLQeTYD7Xcqrwg9LoCNC1LkFTpp7IcXwH9nZcFRtEVK
|
||||
JEy3HfNxh6PlZuHQI6/PjHuEG4eHDuaoY5l+J9QQk6NzILvnjhev/M2Sxhp7vJGX
|
||||
B7v9wC3QLC8HWDrx0eIVtJfRuxRbrEd9EaibKGXzRmwdPbO7dl3YZkRtOM6xzwAi
|
||||
AcwrB/C0e0vEMBsG7y58Dmn9Cla5eHT/Os97TvcHIDgrja0tLW71BBhJc/pY3VYC
|
||||
wmvksQH2jvjF4oq1sR3LHHvIvXE7Hyhmao3eKo8deQtIKSJqOAlu+jQXJNCWz9ye
|
||||
jNwYffUInVOuI8/16l1jFX29dXNGtOSuaVDZTDgo6QKkQAPQ1UkpbFLUEnVbxWNP
|
||||
zZAQFCBEgByD8QHaq75IbQnXAf3bBemSXPgtxoSKt8moUNUiZX9ET4qRYkYlX6jA
|
||||
HCMtUyysL5up9gyECWm/l93p8ECzDs0Q2LRBj7DoRM3X44o3Jdg+gwhpqPty4ahT
|
||||
RulyKsk/EGCFqGPTJb6zx0DaMEihY5bqv50T0zsSxcPIkCcZWDimyvyZpzPAUNvD
|
||||
tdLcLEs0ei2ASuD7hXKq/FR2kE7HGLgLUct344NaFtHdqj2xmm4nkU9aG9oel6M=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
Y/RS4VZytAQWugF+BCQjH7wS0RqK
|
||||
-----END PRIVATE KEY-----
|
||||
+3
-3
@@ -16,8 +16,8 @@ import (
|
||||
"github.com/luxfi/crypto/bls/signer/localsigner"
|
||||
luxcrypto "github.com/luxfi/crypto/secp256k1"
|
||||
"github.com/luxfi/ids"
|
||||
"github.com/luxfi/protocol/p/signer"
|
||||
luxtls "github.com/luxfi/tls"
|
||||
"github.com/luxfi/node/staking"
|
||||
"github.com/luxfi/node/vms/platformvm/signer"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -75,7 +75,7 @@ func upgradeNode(nodeDir string) error {
|
||||
return fmt.Errorf("failed to read staker.key: %w", err)
|
||||
}
|
||||
|
||||
tlsCert, err := luxtls.LoadTLSCertFromBytes(keyPEM, certPEM)
|
||||
tlsCert, err := staking.LoadTLSCertFromBytes(keyPEM, certPEM)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to load TLS cert: %w", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user