Giter Site home page Giter Site logo

zondax / ledger-polkadot Goto Github PK

View Code? Open in Web Editor NEW
60.0 11.0 32.0 124.68 MB

Polkadot app for Ledger Nano S and X

License: Apache License 2.0

GDB 0.05% CMake 1.07% Makefile 0.61% C 89.75% Rust 1.65% C++ 3.10% JavaScript 0.22% Python 0.29% TypeScript 3.27%
polkadot ledger

ledger-polkadot's Introduction

Ledger Polkadot App

License GithubActions


zondax_light zondax_dark

Please visit our website at zondax.ch


This project contains the Polkadot app (https://polkadot.network/) for Ledger Nano S and X.

  • Ledger Nano S/X BOLOS app
  • Specs / Documentation
  • C++ unit tests
  • Zemu tests

For more information: How to build

ATTENTION

Please:

  • Do not use in production
  • Do not use a Ledger device with funds for development purposes.
  • Have a separate and marked device that is used ONLY for development and testing

Polkadot 25.1001000.x

System

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Remark ✔️ ✔️ ✔️ Bytesremark
Set heap pages ✔️ ✔️ ✔️ u64pages
Set code ✔️ ✔️ ✔️ Vecu8code
Set code without checks ✔️ ✔️ ✔️ Vecu8code
Set storage VecKeyValueitems
Kill storage VecKeykeys
Kill prefix Keyprefix
u32subkeys
Remark with event ✔️ ✔️ ✔️ Bytesremark

Scheduler

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Schedule BlockNumberwhen
OptionschedulePeriodBlockNumbermaybe_periodic
schedulePrioritypriority
Callcall
Cancel BlockNumberwhen
u32index
Schedule named TaskNameid
BlockNumberwhen
OptionschedulePeriodBlockNumbermaybe_periodic
schedulePrioritypriority
Callcall
Cancel named TaskNameid
Schedule after BlockNumberafter
OptionschedulePeriodBlockNumbermaybe_periodic
schedulePrioritypriority
Callcall
Schedule named after TaskNameid
BlockNumberafter
OptionschedulePeriodBlockNumbermaybe_periodic
schedulePrioritypriority
Callcall

Preimage

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Note preimage ✔️ ✔️ Vecu8bytes
Unnote preimage ✔️ ✔️ Hashhash
Request preimage ✔️ ✔️ Hashhash
Unrequest preimage ✔️ ✔️ Hashhash
Ensure updated ✔️ ✔️ VecHashhashes

Babe

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Report equivocation BoxEquivocationProofHeaderequivocation_proof
KeyOwnerProofkey_owner_proof
Report equivocation unsigned BoxEquivocationProofHeaderequivocation_proof
KeyOwnerProofkey_owner_proof
Plan config change NextConfigDescriptorconfig

Timestamp

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Set ✔️ ✔️ Compactu64now

Indices

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Claim ✔️ ✔️ AccountIndexindex
Transfer ✔️ ✔️ AccountIdLookupOfTnew_
AccountIndexindex
Free ✔️ ✔️ AccountIndexindex
Force transfer ✔️ ✔️ AccountIdLookupOfTnew_
AccountIndexindex
boolfreeze
Freeze ✔️ ✔️ AccountIndexindex

Balances

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Transfer allow death ✔️ ✔️ ✔️ ✔️ AccountIdLookupOfTdest
CompactBalanceamount
Force transfer ✔️ ✔️ ✔️ ✔️ AccountIdLookupOfTsource
AccountIdLookupOfTdest
CompactBalanceamount
Transfer keep alive ✔️ ✔️ ✔️ ✔️ AccountIdLookupOfTdest
CompactBalanceamount
Transfer all ✔️ ✔️ ✔️ ✔️ AccountIdLookupOfTdest
boolkeep_alive
Force unreserve ✔️ ✔️ AccountIdLookupOfTwho
Balanceamount
Upgrade accounts ✔️ ✔️ VecAccountIdwho
Force set balance ✔️ ✔️ AccountIdLookupOfTwho
CompactBalancenew_free

Staking

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Bond ✔️ ✔️ ✔️ ✔️ CompactBalanceamount
RewardDestinationpayee
Bond extra ✔️ ✔️ ✔️ ✔️ CompactBalanceamount
Unbond ✔️ ✔️ ✔️ ✔️ CompactBalanceamount
Withdraw Unbonded ✔️ ✔️ ✔️ ✔️ u32num_slashing_spans
Validate ✔️ ✔️ ✔️ ✔️ ValidatorPrefsprefs
Nominate ✔️ ✔️ ✔️ ✔️ VecAccountIdLookupOfTtargets
Chill ✔️ ✔️ ✔️ ✔️
Set payee ✔️ ✔️ ✔️ ✔️ RewardDestinationpayee
Set controller ✔️ ✔️ ✔️ ✔️
Set validator count ✔️ ✔️ Compactu32new_
Increase validator count ✔️ ✔️ Compactu32additional
Scale validator count ✔️ ✔️ Percentfactor
Force no eras ✔️ ✔️
Force new era ✔️ ✔️
Set invulnerables ✔️ ✔️ VecAccountIdinvulnerables
Force unstake ✔️ ✔️ AccountIdstash
u32num_slashing_spans
Force new era always ✔️ ✔️
Cancel deferred slash ✔️ ✔️ EraIndexera
Vecu32slash_indices
Payout stakers ✔️ ✔️ ✔️ ✔️ AccountIdvalidator_stash
EraIndexera
Rebond ✔️ ✔️ ✔️ ✔️ CompactBalanceamount
Reap stash ✔️ ✔️ AccountIdstash
u32num_slashing_spans
Kick ✔️ ✔️ VecAccountIdLookupOfTwho
Set staking configs ✔️ ✔️ ConfigOpBalanceOfTmin_nominator_bond
ConfigOpBalanceOfTmin_validator_bond
ConfigOpu32max_nominator_count
ConfigOpu32max_validator_count
ConfigOpPercentchill_threshold
ConfigOpPerbillmin_commission
Chill other ✔️ ✔️ AccountIdcontroller
Force apply min commission ✔️ ✔️ AccountIdvalidator_stash
Set min commission ✔️ ✔️ Perbillnew_

Beefy

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Report equivocation BoxEquivocationProofBlockNumberForTBeefyIdBeefyIdasRuntimeAppPublicSignatureequivocation_proof
KeyOwnerProofkey_owner_proof
Report equivocation unsigned BoxEquivocationProofBlockNumberForTBeefyIdBeefyIdasRuntimeAppPublicSignatureequivocation_proof
KeyOwnerProofkey_owner_proof
Set new genesis BlockNumberdelay_in_blocks

Session

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Set keys ✔️ ✔️ ✔️ ✔️ Keyskeys
Bytesproof
Purge keys ✔️ ✔️ ✔️ ✔️

Grandpa

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Report equivocation BoxEquivocationProofHashBlockNumberequivocation_proof
KeyOwnerProofkey_owner_proof
Report equivocation unsigned BoxEquivocationProofHashBlockNumberequivocation_proof
KeyOwnerProofkey_owner_proof
Note stalled BlockNumberdelay
BlockNumberbest_finalized_block_number

ImOnline

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Heartbeat HeartbeatBlockNumberheartbeat
AuthorityIdasRuntimeAppPublicSignaturesignature

Treasury

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Propose spend ✔️ ✔️ CompactBalanceamount
AccountIdLookupOfTbeneficiary
Reject proposal ✔️ ✔️ Compactu32proposal_id
Approve proposal ✔️ ✔️ Compactu32proposal_id
Spend local ✔️ ✔️ CompactBalanceamount
AccountIdLookupOfTbeneficiary
Remove approval ✔️ ✔️ Compactu32proposal_id
Spend BoxAssetKindasset_kind
CompactBalanceamount
BoxBeneficiaryLookupOfbeneficiary
OptionBlockNumbervalid_from
Payout ✔️ ✔️ SpendIndexindex
Check status ✔️ ✔️ SpendIndexindex
Void spend ✔️ ✔️ SpendIndexindex

ConvictionVoting

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Vote ✔️ ✔️ ✔️ Compactu32poll_index
AccountVotevote
Delegate ✔️ ✔️ ✔️ ClassOfclass_
AccountIdLookupOfTto
Convictionconviction
BalanceOfbalance
Undelegate ✔️ ✔️ ✔️ ClassOfclass_
Unlock ✔️ ✔️ ✔️ ClassOfclass_
AccountIdLookupOfTtarget
Remove vote ✔️ ✔️ ✔️ OptionClassOfclass_
PollIndexOfindex
Remove other vote ✔️ ✔️ ✔️ AccountIdLookupOfTtarget
ClassOfclass_
PollIndexOfindex

Referenda

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Submit ✔️ ✔️ BoxPalletsOriginproposal_origin
BoundedCallOfTproposal
DispatchTimeBlockNumberenactment_moment
Place decision deposit ✔️ ✔️ ReferendumIndexindex
Refund decision deposit ✔️ ✔️ ReferendumIndexindex
Cancel ✔️ ✔️ ReferendumIndexindex
Kill ✔️ ✔️ ReferendumIndexindex
Nudge referendum ✔️ ✔️ ReferendumIndexindex
One fewer deciding ✔️ ✔️ TrackIdOftrack
Refund submission deposit ✔️ ✔️ ReferendumIndexindex
Set metadata ✔️ ✔️ ReferendumIndexindex
OptionHashmaybe_hash

Whitelist

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Whitelist call ✔️ ✔️ Hashcall_hash
Remove whitelisted call ✔️ ✔️ Hashcall_hash
Dispatch whitelisted call ✔️ ✔️ Hashcall_hash
u32call_encoded_len
Weightcall_weight_witness
Dispatch whitelisted call with preimage ✔️ ✔️ Callcall

Claims

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Claim ✔️ ✔️ AccountIddest
EcdsaSignatureethereum_signature
Mint claim EthereumAddresswho
Balanceamount
OptionTupleBalanceOfTBalanceOfTBlockNumbervesting_schedule
OptionStatementKindstatement
Claim attest ✔️ ✔️ AccountIddest
EcdsaSignatureethereum_signature
Bytesstatement
Attest ✔️ ✔️ Bytesstatement
Move claim ✔️ ✔️ EthereumAddressold
EthereumAddressnew_
OptionAccountIdmaybe_preclaim

Vesting

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Vest ✔️ ✔️
Vest other ✔️ ✔️ AccountIdLookupOfTtarget
Vested transfer ✔️ ✔️ AccountIdLookupOfTtarget
VestingInfoschedule
Force vested transfer ✔️ ✔️ AccountIdLookupOfTsource
AccountIdLookupOfTtarget
VestingInfoschedule
Merge schedules ✔️ ✔️ u32schedule1_index
u32schedule2_index

Utility

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Batch ✔️ ✔️ ✔️ VecCallcalls
As derivative u16index
Callcall
Batch all ✔️ ✔️ ✔️ VecCallcalls
Dispatch as ✔️ ✔️ BoxPalletsOriginas_origin
Callcall
Force batch ✔️ ✔️ ✔️ VecCallcalls
With weight ✔️ ✔️ Callcall
Weightweight

Identity

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Add registrar ✔️ ✔️ AccountIdLookupOfTaccount
Set identity ✔️ ✔️ IdentityInfoinfo
Set subs ✔️ ✔️ VecTupleAccountIdDatasubs
Clear identity ✔️ ✔️
Request judgement ✔️ ✔️ Compactu32reg_index
Compactu128max_fee
Cancel request ✔️ ✔️ RegistrarIndexreg_index
Set fee ✔️ ✔️ Compactu32index
Compactu128fee
Set account id ✔️ ✔️ Compactu32index
AccountIdLookupOfTnew_
Set fields Compactu32index
IdentityFieldsIdentityInformationasIdentityInformationProviderIdentityFieldfields
Provide judgement ✔️ ✔️ Compactu32reg_index
AccountIdLookupOfTtarget
JudgementBalanceOfTjudgement
Hashidentity
Kill identity ✔️ ✔️ AccountIdLookupOfTtarget
Add sub ✔️ ✔️ AccountIdLookupOfTsub
Datadata
Rename sub ✔️ ✔️ AccountIdLookupOfTsub
Datadata
Remove sub ✔️ ✔️ AccountIdLookupOfTsub
Quit sub ✔️ ✔️

Proxy

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Proxy ✔️ ✔️ ✔️ AccountIdLookupOfTreal
OptionProxyTypeforce_proxy_type
Callcall
Add proxy ✔️ ✔️ ✔️ AccountIdLookupOfTdelegate
ProxyTypeproxy_type
BlockNumberdelay
Remove proxy ✔️ ✔️ ✔️ AccountIdLookupOfTdelegate
ProxyTypeproxy_type
BlockNumberdelay
Remove proxies ✔️ ✔️
Create pure ✔️ ✔️ ✔️ ProxyTypeproxy_type
BlockNumberdelay
u16index
Kill pure ✔️ ✔️ ✔️ AccountIdLookupOfTspawner
ProxyTypeproxy_type
u16index
Compactu32height
Compactu32ext_index
Announce AccountIdLookupOfTreal
CallHashOfcall_hash
Remove announcement AccountIdLookupOfTreal
CallHashOfcall_hash
Reject announcement AccountIdLookupOfTdelegate
CallHashOfcall_hash
Proxy announced ✔️ ✔️ AccountIdLookupOfTdelegate
AccountIdLookupOfTreal
OptionProxyTypeforce_proxy_type
Callcall

Multisig

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
As multi threshold 1 ✔️ ✔️ ✔️ VecAccountIdother_signatories
Callcall
As multi ✔️ ✔️ ✔️ u16threshold
VecAccountIdother_signatories
OptionTimepointmaybe_timepoint
Callcall
Weightmax_weight
Approve as multi ✔️ ✔️ ✔️ u16threshold
VecAccountIdother_signatories
OptionTimepointmaybe_timepoint
H256call_hash
Weightmax_weight
Cancel as multi ✔️ ✔️ ✔️ u16threshold
VecAccountIdother_signatories
Timepointtimepoint
H256call_hash

Bounties

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Propose bounty ✔️ ✔️ CompactBalanceamount
Bytesdescription
Approve bounty ✔️ ✔️ Compactu32bounty_id
Propose curator ✔️ ✔️ Compactu32bounty_id
AccountIdLookupOfTcurator
CompactBalancefee
Unassign curator ✔️ ✔️ Compactu32bounty_id
Accept curator ✔️ ✔️ Compactu32bounty_id
Award bounty ✔️ ✔️ Compactu32bounty_id
AccountIdLookupOfTbeneficiary
Claim bounty ✔️ ✔️ Compactu32bounty_id
Close bounty ✔️ ✔️ Compactu32bounty_id
Extend bounty expiry ✔️ ✔️ Compactu32bounty_id
Bytesremark

ChildBounties

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Add child bounty ✔️ ✔️ Compactu32parent_bounty_id
CompactBalanceamount
Vecu8description
Propose curator ✔️ ✔️ Compactu32parent_bounty_id
Compactu32child_bounty_id
AccountIdLookupOfTcurator
CompactBalancefee
Accept curator ✔️ ✔️ Compactu32parent_bounty_id
Compactu32child_bounty_id
Unassign curator ✔️ ✔️ Compactu32parent_bounty_id
Compactu32child_bounty_id
Award child bounty ✔️ ✔️ Compactu32parent_bounty_id
Compactu32child_bounty_id
AccountIdLookupOfTbeneficiary
Claim child bounty ✔️ ✔️ Compactu32parent_bounty_id
Compactu32child_bounty_id
Close child bounty ✔️ ✔️ Compactu32parent_bounty_id
Compactu32child_bounty_id

ElectionProviderMultiPhase

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Submit unsigned BoxRawSolutionSolutionOfMinerConfigraw_solution
SolutionOrSnapshotSizewitness
Set minimum untrusted score OptionElectionScoremaybe_next_score
Set emergency election result SupportsAccountIdsupports
Submit BoxRawSolutionSolutionOfMinerConfigraw_solution
Governance fallback Optionu32maybe_max_voters
Optionu32maybe_max_targets

VoterList

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Rebag ✔️ ✔️ AccountIdLookupOfTdislocated
Put in front of ✔️ ✔️ AccountIdLookupOfTlighter
Put in front of other ✔️ ✔️ AccountIdLookupOfTheavier
AccountIdLookupOfTlighter

NominationPools

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Join ✔️ ✔️ ✔️ CompactBalanceamount
PoolIdpool_id
Bond extra ✔️ ✔️ ✔️ BondExtraBalanceOfTextra
Claim payout ✔️ ✔️ ✔️
Unbond ✔️ ✔️ ✔️ AccountIdLookupOfTmember_account
CompactBalanceunbonding_points
Pool withdraw unbonded ✔️ ✔️ PoolIdpool_id
u32num_slashing_spans
Withdraw Unbonded ✔️ ✔️ ✔️ AccountIdLookupOfTmember_account
u32num_slashing_spans
Create ✔️ ✔️ ✔️ CompactBalanceamount
AccountIdLookupOfTroot
AccountIdLookupOfTnominator
AccountIdLookupOfTbouncer
Create with pool id ✔️ ✔️ CompactBalanceamount
AccountIdLookupOfTroot
AccountIdLookupOfTnominator
AccountIdLookupOfTbouncer
PoolIdpool_id
Nominate ✔️ ✔️ ✔️ PoolIdpool_id
VecAccountIdvalidators
Set state ✔️ ✔️ ✔️ PoolIdpool_id
PoolStatestate
Set metadata ✔️ ✔️ ✔️ PoolIdpool_id
Vecu8metadata
Set configs ✔️ ✔️ ConfigOpBalanceOfTmin_join_bond
ConfigOpBalanceOfTmin_create_bond
ConfigOpu32max_pools
ConfigOpu32max_members
ConfigOpu32max_members_per_pool
ConfigOpPerbillglobal_max_commission
Update roles ✔️ ✔️ ✔️ PoolIdpool_id
ConfigOpAccountIdnew_root
ConfigOpAccountIdnew_nominator
ConfigOpAccountIdnew_bouncer
Chill ✔️ ✔️ ✔️ PoolIdpool_id
Bond extra other ✔️ ✔️ AccountIdLookupOfTmember
BondExtraBalanceOfTextra
Set claim permission ✔️ ✔️ ✔️ ClaimPermissionpermission
Claim payout other ✔️ ✔️ ✔️ AccountIdother
Set commission ✔️ ✔️ ✔️ PoolIdpool_id
OptionTuplePerbillAccountIdnew_commission
Set commission max ✔️ ✔️ ✔️ PoolIdpool_id
Perbillmax_commission
Set commission change rate ✔️ ✔️ ✔️ PoolIdpool_id
CommissionChangeRateBlockNumberchange_rate
Claim commission ✔️ ✔️ ✔️ PoolIdpool_id
Adjust pool deposit ✔️ ✔️ PoolIdpool_id

FastUnstake

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Register fast unstake ✔️ ✔️ ✔️
Deregister ✔️ ✔️ ✔️
Control ✔️ ✔️ EraIndexeras_to_check

Configuration

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Set validation upgrade cooldown ✔️ ✔️ BlockNumbernew_
Set validation upgrade delay ✔️ ✔️ BlockNumbernew_
Set code retention period ✔️ ✔️ BlockNumbernew_
Set max code size ✔️ ✔️ u32new_
Set max pov size ✔️ ✔️ u32new_
Set max head data size ✔️ ✔️ u32new_
Set on demand cores ✔️ ✔️ u32new_
Set on demand retries ✔️ ✔️ u32new_
Set group rotation frequency ✔️ ✔️ BlockNumbernew_
Set paras availability period ✔️ ✔️ BlockNumbernew_
Set scheduling lookahead ✔️ ✔️ u32new_
Set max validators per core ✔️ ✔️ Optionu32new_
Set max validators ✔️ ✔️ Optionu32new_
Set dispute period SessionIndexnew_
Set dispute post conclusion acceptance period ✔️ ✔️ BlockNumbernew_
Set no show slots ✔️ ✔️ u32new_
Set n delay tranches ✔️ ✔️ u32new_
Set zeroth delay tranche width ✔️ ✔️ u32new_
Set needed approvals ✔️ ✔️ u32new_
Set relay vrf modulo samples ✔️ ✔️ u32new_
Set max upward queue count ✔️ ✔️ u32new_
Set max upward queue size ✔️ ✔️ u32new_
Set max downward message size ✔️ ✔️ u32new_
Set max upward message size ✔️ ✔️ u32new_
Set max upward message num per candidate ✔️ ✔️ u32new_
Set hrmp open request ttl ✔️ ✔️ u32new_
Set hrmp sender deposit ✔️ ✔️ Balancenew_
Set hrmp recipient deposit ✔️ ✔️ Balancenew_
Set hrmp channel max capacity ✔️ ✔️ u32new_
Set hrmp channel max total size ✔️ ✔️ u32new_
Set hrmp max parachain inbound channels ✔️ ✔️ u32new_
Set hrmp channel max message size ✔️ ✔️ u32new_
Set hrmp max parachain outbound channels ✔️ ✔️ u32new_
Set hrmp max message num per candidate ✔️ ✔️ u32new_
Set pvf voting ttl ✔️ ✔️ SessionIndexnew_
Set minimum validation upgrade delay ✔️ ✔️ BlockNumbernew_
Set bypass consistency check ✔️ ✔️ boolnew_
Set async backing params AsyncBackingParamsnew_
Set executor params ExecutorParamsnew_
Set on demand base fee ✔️ ✔️ Balancenew_
Set on demand fee variability ✔️ ✔️ Perbillnew_
Set on demand queue max size ✔️ ✔️ u32new_
Set on demand target queue utilization ✔️ ✔️ Perbillnew_
Set on demand ttl ✔️ ✔️ BlockNumbernew_
Set minimum backing votes ✔️ ✔️ u32new_

ParasShared

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments

ParaInclusion

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments

ParaInherent

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Enter ParachainsInherentDataHeaderdata

Paras

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Force set current code ParaIdpara
ValidationCodenew_code
Force set current head ParaIdpara
HeadDatanew_head
Force schedule code upgrade ParaIdpara
ValidationCodenew_code
BlockNumberrelay_parent_number
Force note new head ParaIdpara
HeadDatanew_head
Force queue action ParaIdpara
Add trusted validation code ValidationCodevalidation_code
Poke unused validation code ValidationCodeHashvalidation_code_hash
Include pvf check statement PvfCheckStatementstmt
ValidatorSignaturesignature
Force set most recent context ParaIdpara
BlockNumbercontext

Initializer

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Force approve ✔️ ✔️ BlockNumberup_to

Hrmp

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Hrmp init open channel ParaIdrecipient
u32proposed_max_capacity
u32proposed_max_message_size
Hrmp accept open channel ParaIdsender
Hrmp close channel HrmpChannelIdchannel_id
Force clean hrmp ParaIdpara
u32num_inbound
u32num_outbound
Force process hrmp open u32channels
Force process hrmp close u32channels
Hrmp cancel open request HrmpChannelIdchannel_id
u32open_requests
Force open hrmp channel ParaIdsender
ParaIdrecipient
u32max_capacity
u32max_message_size
Establish system channel ParaIdsender
ParaIdrecipient
Poke channel deposits ParaIdsender
ParaIdrecipient

ParasDisputes

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Force unfreeze ✔️ ✔️

ParasSlashing

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Report dispute lost unsigned BoxDisputeProofdispute_proof
KeyOwnerProofkey_owner_proof

Registrar

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Register ParaIdid
HeadDatagenesis_head
ValidationCodevalidation_code
Force register AccountIdwho
Balancedeposit
ParaIdid
HeadDatagenesis_head
ValidationCodevalidation_code
Deregister ParaIdid
Swap ParaIdid
ParaIdother
Remove lock ParaIdpara
Reserve
Add lock ParaIdpara
Schedule code upgrade ParaIdpara
ValidationCodenew_code
Set current head ParaIdpara
HeadDatanew_head

Slots

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Force lease ParaIdpara
AccountIdleaser
Balanceamount
LeasePeriodOfTperiod_begin
LeasePeriodOfTperiod_count
Clear all leases ParaIdpara
Trigger onboard ParaIdpara

Auctions

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
New auction ✔️ ✔️ Compactu32duration
Compactu32lease_period_index
Bid ✔️ ✔️ Compactu32para
Compactu32auction_index
Compactu32first_slot
Compactu32last_slot
CompactBalanceamount
Cancel auction ✔️ ✔️

Crowdloan

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Create ✔️ ✔️ ✔️ Compactu32index
Compactu128cap
Compactu32first_period
Compactu32last_period
Compactu32end
OptionMultiSignerverifier
Contribute ✔️ ✔️ ✔️ Compactu32index
Compactu128amount
OptionMultiSignaturesignature
Withdraw ✔️ ✔️ ✔️ AccountIdwho
Compactu32index
Refund ✔️ ✔️ ✔️ Compactu32index
Dissolve ✔️ ✔️ ✔️ Compactu32index
Edit ✔️ ✔️ ✔️ Compactu32index
Compactu128cap
Compactu32first_period
Compactu32last_period
Compactu32end
OptionMultiSignerverifier
Add memo ✔️ ✔️ ✔️ ParaIdindex
Vecu8memo
Poke ✔️ ✔️ ✔️ ParaIdindex
Contribute all ✔️ ✔️ ✔️ Compactu32index
OptionMultiSignaturesignature

XcmPallet

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Send BoxVersionedMultiLocationdest
BoxVersionedXcmTuplemessage
Teleport assets ✔️ BoxVersionedMultiLocationdest
BoxVersionedMultiLocationbeneficiary
BoxVersionedMultiAssetsassets
u32fee_asset_item
Reserve transfer assets ✔️ BoxVersionedMultiLocationdest
BoxVersionedMultiLocationbeneficiary
BoxVersionedMultiAssetsassets
u32fee_asset_item
Execute BoxVersionedXcmTasConfigRuntimeCallmessage
Weightmax_weight
Force xcm version BoxMultiLocationlocation
XcmVersionversion
Force default xcm version OptionXcmVersionmaybe_xcm_version
Force subscribe version notify BoxVersionedMultiLocationlocation
Force unsubscribe version notify BoxVersionedMultiLocationlocation
Limited reserve transfer assets ✔️ BoxVersionedMultiLocationdest
BoxVersionedMultiLocationbeneficiary
BoxVersionedMultiAssetsassets
u32fee_asset_item
WeightLimitweight_limit
Limited teleport assets ✔️ BoxVersionedMultiLocationdest
BoxVersionedMultiLocationbeneficiary
BoxVersionedMultiAssetsassets
u32fee_asset_item
WeightLimitweight_limit
Force suspension boolsuspended

MessageQueue

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Reap page MessageOriginOfTmessage_origin
PageIndexpage_index
Execute overweight MessageOriginOfTmessage_origin
PageIndexpage
Sizeindex
Weightweight_limit

AssetRate

Name Nano S Nano S XL Nano SP/X - Stax Nesting Arguments
Create BoxAssetKindasset_kind
FixedU128rate
Update BoxAssetKindasset_kind
FixedU128rate
Remove BoxAssetKindasset_kind

ledger-polkadot's People

Contributors

bigspider avatar carlosala avatar chcmedeiros avatar demi-marie avatar dependabot[bot] avatar emmanuelm41 avatar fbeutin-ledger avatar ftheirs avatar grydz avatar jleni avatar leongb avatar pscott avatar raynaudoe avatar tamtamhero avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ledger-polkadot's Issues

Allow dev mode

For testing purposes, it would be great if we could install the app with a custom prefix. This would allow for testing it with custom Substrate chains that merely differ in SS58 prefix, enabling projects like Subsocial, Phala, and others to test for Ledger compatibility as well. Likewise, it would allow developers to test with the locally running --dev chain, making development much easier.

Wording improvements

In order to stay consistant with existing apps, could we:

  • (kinda duplicate from #50) use 'Amount' instead of 'Value' in 'transfer keep alive', 'unbond', 'rebond' and 'bond' operations
  • (kinda duplicate from #50) use 'Amount' instead of 'Max additional' in 'bond extra' operation
  • change the 'u' of 'unbonded' in 'Withdraw unbonded' to a capital 'U' (since the term is specific to DOT, our team to bring attention to it by capitalizing it)

Ledger cannot connect to polkadot.js

I cannot connect to the Ledger and access my funds.

"No compatible devices found".

The Ledger appears when on the home screen, but if I try to connect in this state, I receive the error "Access Denied". As soon as I open up the Polkadot app it disappears from the WebUSB list.

I have tried Chromium and Brave. The Ledger firmware is up to date. The Polkadot app on the Ledger is up to date. Ledger Live is not running in the background; nothing else is trying to access the Ledger.

Transfer not allowed

Hello, I installed your application on Ledger Nano X: "Polkadot_sec".
I successfully received several DOT, but I cannot send it. Error: Not Allowed

UX fail: Ledger live doesn't show a QR code of the recieve address

Without a QR code you're forced to read AND type the address to recieve manually and that's pretty error prone... so pretty please from a usability perspective can we have this? My friend with the ledger and the dots was very worried she might have mistyped something and sent it to the wrong address.

Allow `proxy.proxy`

Hey!

I noticed that proxy.proxy calls are not currently supported. I use them frequently as part of my workflow and would love to be able to use this application.

I expect that much like utility.batch calls, the UX on signature approval can be pretty difficult / frustrating. I outlined some ideas on improving this flow in #16.

Additionally, I think the proxy.proxy approval process can be limited to approving the standard fields of the embedded call and additionally approving the signing address.

Improvement: Remove trailing 0

In some flows (at least 'Transfer keep alive' and 'Withdraw unbonded'. I'll try to review and list all flows that are impacted), the 'Value' screen displays trailing 0s after the last significative digit. It would be easier to read if we removed them

Is `ledger-polkadot` hardcoded to support only Polkadot, but not other testnets like `Westend`?

I use the @ledgerhq/hw-app-polkadot library to sign payloads for transactions. Code below works on Polkadot:

  const { block } = await api.rpc.chain.getBlock();
  const blockNumber = block.header.number.unwrap().toNumber();
  const blockHash = (await api.rpc.chain.getBlockHash()).toHex();
  const genesisHash = (await api.rpc.chain.getBlockHash(0)).toHex();
  const metadataRpc = (await api.rpc.state.getMetadata()).toHex();
  const runtimeVersion = await api.rpc.state.getRuntimeVersion();
  const specVersion = runtimeVersion.specVersion.toNumber();
  const transactionVersion = runtimeVersion.transactionVersion.toNumber();
  const specName = runtimeVersion.specName.toString();
  const ledgerAddress = (await getLedgerAddress(ledgerInstance)).address;
  const { nonce, } = await api.query.system.account(ledgerAddress);
  const chainName = (await api.rpc.system.chain()).toString();

  log.cyan(`You are connected to chain: ${chainName}`);
  log.cyan(transactionVersion);
  log.cyan(specName);

  const registry = getRegistry({
    chainName,
    specName: specName as specNameType,
    specVersion,
    metadataRpc,
  });
  
  const unsigned = methods.balances.transfer(
    {
      value: totalAmount,
      dest,
    },
    {
      address,
      blockHash,
      blockNumber,
      eraPeriod: 64,
      genesisHash,
      metadataRpc,
      nonce: nonce.toNumber(),
      specVersion,
      tip: 0,
      transactionVersion,
    },
    {
      metadataRpc,
      registry,
    }
  );

  // https://github.com/LedgerHQ/ledger-live-common/blob/master/src/families/polkadot/js-signOperation.js#L177
  const extrinsicPayload = registry.createType(
    "ExtrinsicPayload",
    unsigned,
    {
      version: unsigned.version,
    }
  );
  const extrinsicPayloadU8a = extrinsicPayload.toU8a({ method: true });
  const signingPayloadU8a = extrinsicPayloadU8a.length > 256
		? registry.hash(extrinsicPayloadU8a)
		: extrinsicPayloadU8a;

  // code below throws error on testnet Westend
  const {signature} = await ledgerSign(ledgerInstance, signingPayloadU8a);

  const signedTx = construct.signedTx(unsigned, signature, { metadataRpc, registry });
  return signedTx;

However it doesn't work on the testnet Westend. The same code throws error "Txn version is not supported". If I hardcode the transactionVersion variable to be 6 which is the number on Polkadot, it throws Unexpected buffer end.

Is ledger-polkadot hardcoded to support only Polkadot but not testnet like Westend?

Modify sign workflow

The signing UI/UX should allow going back to review.
Additionally, all navigation should be horizontal.

polkadot.js question

So I have a bit of an issue. I attached my ledger in polkadot.js, and if you don't have "only this network" checked for the account, it apparently adds that account across all networks, but with different addresses. Under Kusama, it shows this polkadot account but with a Kusama wallet address, so I accidentally sent KSM to this address. But my problem now is when I have Kusama open I cant sign the transaction to send them to another wallet, with my ledger, because its wanting me to open the Kusama app in my ledger. But that is a different account with its own set of private keys. What I think needs to be done is, I have to sign the Kusama transaction with the polkadot app on the ledger, since that wallet has the private keys for the Kusama wallet I sent my KSM too. I hope that wasn't too confusing, its a bit difficult for me to explain, since I am fairly knew to this technology. Any help or info would be appreciated on what to do next.

Thanks.

Session.Setkeys (Not Supported)

Good day,

I am trying to submit my session_key to a stash in which both the controller and stash accounts reside on the ledger. When I attempt to do so I receive an error that session.setkeys isn't supported. I have successfully used this extrinsic on Kusama.

My app version is 6.28.0

Any help would be appreciated.

Ledger app issue

I have tried installing the polkadot app on both a Nano X and Nano S (apps successfully installed on latest firmware) using Ledger Live. However, on both devices, the app crashes a few seconds after opening it on the Ledger device.

Question: Trying to make app work with dev chain

In the pursuit of using Ledger wallet for our Substrate chain (a fork of node-template), I tried making it work with our dev chain. With mostly chain-specific (decimal count, genesis hash, etc) modifications to the app as shown in this commit and polkadot-js apps UI (details of the modifications in this issue if you care), I was able to get a Ledger account added and a balance transfer done but I had to comment out the following lines from _readTx in parser_iml.c as you can see in my commit.

if (c->offset < c->bufferLen) {
    return parser_unexpected_unparsed_bytes;
}

From what I understand, this check ensures that the app is not getting any extra data in the transaction that it is not expecting, is that correct?

  • Can there be any bad implications of not having this check?
  • Any pointers on how to find out what extra data is being sent that the app is not expecting? I am able to get the raw txn bytes sent from the browser but don't know how to debug in the app itself?
  • Don't have much exp. with C or hardware programming so any pointers would be helpful.

Ledger Live Staking Issue

Stash account is a Ledger account. Controller account is injected from the Chrome extension to Polkadot.js. Everything works fine with staking. Then when Ledger Live support for Polkadot was released today with staking, I wanted to "move it over" to Ledger Live. I added the Polkadot account via Ledger Live and voila, the stash account appeared but the controller account did not because the private key is not on my Ledger -- makes sense.

Because of this, Ledger Live does not let you manage your stash account because it is controlled by a non-Ledger controller. But, you can view the stash account on Ledger Live and see the transactions, etc. It all seems to be working fine if you want to let it ride. But if you want to make any changes, it doesn't seem like I can do it from Ledger Live.

Attached is a screen grab of the message displayed in the Nominations portion of the account page on Ledger Live. Instead of giving access to nomination features, it displays this message.
2

I am wondering what my next step should be. Create a new controller on Ledger Live and control the stasher that way? Unbond and start again on Ledger Live? Thank you!

Reduce app size.

Hi, it would be great if I could use the Polkadot and Kusama app on a Ledger Nano S.

Atm the Polkadot and Kusama apps take 112 and 120 kb which is 232kb. The Ledger S has 156kb capacity.

Is it possible to perhaps tweak with compiler flags, strip stuff or optimize the apps to fit both on a Ledger Nano S. This would be great, bc. I think it a common app combination users want to have on their Ledgers.

I looked in the code and saw that the rust-app gets built with debuginfo (maybe stripped later i.d.k.). Or twiddling with the panikhandler to save some bytes. Use the z optimisation instead of s....

Address derivation details of Ledger app

I have my own hd wallet implementation for Polkadot that developed with C#.
I used Bip32-Ed25519 for addres derivation like in Ledger (I guess)

My implementation has the same results with test vectors here;
https://github.com/satoshilabs/slips/blob/master/slip-0010.md#test-vector-1-for-ed25519

I can also confirm that addresses I generated from privates keys that generated by my code, also matches with official Polkadot wallet Subkey.

But my addresses doesn't match with Ledger.

The values I got from Ledger:

// 15fn3g9Ehu9FYTBUSzWPihcVfHnfm2AfFNtMtPNMHGkoWTEg m/44'/354'/0'/0'/0'
// 1446qjMShfFgAtGzsLd5ykqC5cHXXDumcbNbPQTd9ZHsoePY m/44'/354'/1'/0'/0'
// 13KpDbPsYHBsT8YDCP3LaDbZkKaTUMXQq4tM8y7hrYD2Hq6m m/44'/354'/2'/0'/0'
// 14qrzk2kjH4gfs4Q2PCEKy6pWS3JeqHkEcvP3TFASm4mVtAW m/44'/354'/0'/0'/1'

with mnemonic
identify fatal close west parent myself awake impact shoot wide wrong derive ship doctor mushroom weather absent vacant armed chuckle swarm hip music wing

From that mnemonic, I am generating the seed;
fd18bdbc7382ea5356efef894d30dd3676a7ce37072e7947dd7e9076f9dd15b829b51d4d5fe9de7364f8dd6ad2c05320d942c69f3aebbad9228395e472d27a35
(also matches with bip39 )

Difference starts here.
address-path pairs I got;
Path: m/44'/354'/0'/0'/0', address: 13HTSwVwT5zCvTSho2RFGkmm5B2PE7aY4WnFpvUikYLTE2La
Path: m/44'/354'/0'/0'/1', address: 12bhKwEky1hjSnsyQhvfXawCirC7UMpQXvkYRcJVP2T9TYwA
Path: m/44'/354'/1'/0'/0', address: 18SnxCintfVLKcR8DDqamFizfPtUXKJh5tEEkrFDywU48Jf
Path: m/44'/434'/2'/0'/0', address: 158Mt8CRsJPNz3XGNpHEBvPAqq5tFkzFK5KCN5hHzV8gtWPS

I am not sure what I am doing different that causes this issue.

Can anyone lead me to the right direction, maybe give more details about Zondax's Polkadot wallet implementation.

my code is here: https://github.com/farukterzioglu/HDWallet

How does the actual ed25519 derivation work

So I have an issue logged from a user around supporting Ledger seeds as an import. Generally this is not such a great idea since you really want to keep the secret safe and locked up.

Having said that, addressing it will also be self-serving for me - i.e. I just had a little episode in which I had to replace my Ledger and while waiting for a replacement (6+ weeks) didn't have access to that specific stash at all. So at least in my recent experience there is an argument to be made that keys should be derivable in a couple of places. (Not available/exposed, just the tools should be there)

So this brings me to how it is done on the Ledger. Did a bit of research and it seems the Tezos (and actual Trezor HW as well) implementation uses the bip32-ed25519. Tested that via others and libraries and it works quite well, but doesn't seem to be compatible with what is outputted on the Ledger.

For earlier posts elsewhere I picked up that (and it may be misleading) that the Ledger does the normal derivation, then hashes the secrete and feeds it into the ed25519 curve when not using the bip25519 approach.

So effectively, from my understanding, the steps are -

  • mnemonic -> seed
  • derive path e.g. m/44'/354'/0'/0'/0' (assuming account 0 & index 0)
  • do something ...
  • create a ed25519 secret/public from this as an input seed

Improve amount representation

Make the displayed amounts more concise and display the unit: for instance instead of 2.00000000000 display 2.0

Use existing code in zxlib

code for ledger app not optimized

hi,

fact is at 144K the Polkadot app is FAR bigger than any other app on my ledger. with limited space, it's a dog. even the highly similar KSM app is only 78K, which is also huge and ought to be severely reduced as well.

App does not seem to be open

I can get to the "Add account" UI on polkadot.js.org and clicking save initiates the pin request on the device. After entering the pin successfully it either gives me an indefinite spinner or says "App not open". Looking in the chrome devtools when receiving the error case there is:

main.ed2ca610.js:35 Error: App does not seem to be open
    at a (polkadot.02.784ba675.js:1)
    at t.default.value (main.ed2ca610.js:1)
    at /apps/async https:/polkadot.js.org/apps/main.ed2ca610.js:1
    at async t.default.value (main.ed2ca610.js:1)
    at /apps/async https:/polkadot.js.org/apps/main.ed2ca610.js:35

I have the same problem on both my arch linux machine (latest stable chromium) and my Macbook Pro (Google Chrome 86.0.4240.111)

Here are the versions on my Ledger Nano X device:

Polkadot app version v5.23.0
Firmware version: Secure Element 1.2.4-5 / Microcontroller 2.10 / Bootloader 1.4

This used to work fine before upgrading the firmware. Upgrading the firmware triggered an app reinstall, so I can't check the polkadot ledger app version I used to have unfortunately.

Left arrow in first page

There is a left arrow on the transaction flow (in general) even though we already are on the most left screen (the first screen appearing when starting the tx).
Let's remove it.

'Unexpected Value' when trying to sign a transaction

Not sure where it is best to report this, but basically when trying to trigger a simple balance transfer from the Polka JS interface it seems like the Ledger App app replies Unexpected Value. Tried to debug this without much success. I believe it also happens with Kusama.

Both the Ledger (X) and Polkadot apps are up to date.

Capture d’écran 2021-03-03 à 09 40 24

Capture d’écran 2021-03-03 à 09 41 20

Allow `utility.batch` calls

Hey!

I noticed that utility.batch calls aren't currently supported in this application -- I've been using these in a lot of places and would love to continue using them.

I understand that utility.batch calls have the potential to introduce a lot of complexity in the signature approval process -- I think this can be improved by:

  • Rejecting embedded utility.batch calls
  • Limiting the number of calls in a utility.batch to a fixed constant (e.g. a max of 20 calls could be added)
  • Allowing some process to configure which fields require an explicit approval (e.g. some users may not care to approve the spec version)

UX improvement

The current app is named Polkadot, but we still display the chain in non expert mode.

Would it be possible in non expert mode to:

  • Remove the chain screen and not allow to sign for other chain (as discussed on slack)
  • Change 'Value' with 'Amount' (To match the other Ledger apps)
  • Add the Unit 'DOT' before the amount value (To match the other Ledger apps)

SignEd25519 error

I requested the SignEd25519 method to return an error:

[APDU_CODE_DATA_INVALID] Referenced data reversibly blocked (invalidated)

this is my transaction data:

04004597993318909e62ef6dc57a90cf2be0de8174930e27b64a9f288b2e42e504020700e40b54020000002f00000003000000e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423ee143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e

Any way to customize the derivation path format?

Currently polkadot portal only allow derivation path in //019//019 format
But most people may come from parity signer, which use //polkadot as the default derivation path
I think it would be great if there's a way to use a user-specified derivation format
so that those who came from parity signer can use the same seed on a ledger, rather than unbonding funds and wait for a month then transfer to the new wallet.

Ledger - Polkadot Setup Issue

I am attempting to set up Polkadot on my new Ledger Nano X. I have followed the step to "Add Ledger", and Add Account Via Ledger (selecting Account Type 0 twice), and I click Save but the app crashes at that point and does not add the Ledger account. I tried this several times, and yesterday it did add the Ledger account and I was able to transfer 1 DOT to the account, but today the Ledger does not show as an account and the file is crashing when I attempt to reinstall. I am glad I only transferred 1 DOT rather than my full DOT balance. Any suggestions on how to remedy this problem?

The Polkadot page also displays:

One of more extensions has been detected in your browser, however no accounts has been injected.

Ensure that the extension has accounts, some accounts are visible globally and available for this chain and that you gave the application permission to access accounts from the extension to use them.

Generating addresses for Polkadot outside of the ledger.

Hello!

BIP 44 defines how addresses should be derived. But the current workflow documented for Polkadot here is very evasive about the account type and address index meaning.
I would like to reproduce the addresses generated by the ledger outside, for instance with Subkey. I would expect that something like mnemonic//44//354//0/0 would reproduce the ledger address obtained with setting both the account type and address index to 0 for instance, but it does not seem to be the case. I tried to mix different soft/hard paths, or to add a coin change placeholder to the path, but it did not help.
Could we get the formula that translates a ledger derivation choice to a subkey formatted command?
Thanks a lot.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.