Compare commits
20 Commits
2ea39ddc99
...
55b5ea2390
Author | SHA1 | Date |
---|---|---|
Christian Kamm | 55b5ea2390 | |
Christian Kamm | a0ec63ad54 | |
Christian Kamm | 8410ddb310 | |
Christian Kamm | fe26040866 | |
Christian Kamm | 27f8ccb42c | |
Christian Kamm | 3e64c8195d | |
Christian Kamm | 8eee11a86a | |
Christian Kamm | 233e5414f4 | |
Christian Kamm | eb46a030d1 | |
Christian Kamm | 115349edb3 | |
Christian Kamm | f5b692ab35 | |
Christian Kamm | b9e70ee5c0 | |
Christian Kamm | cab2c1111e | |
microwavedcola1 | bb29cb7efc | |
Christian Kamm | a3771f1d16 | |
Christian Kamm | acd76e8031 | |
Christian Kamm | 09ef15f869 | |
microwavedcola1 | 8bfb10fb9b | |
Christian Kamm | 6699b25e49 | |
Christian Kamm | b0660df3b9 |
|
@ -0,0 +1,36 @@
|
|||
# Voter Stake Registry Changelog
|
||||
|
||||
## v0.2.4 - 2022-5-4 - not on mainnet
|
||||
|
||||
### Program
|
||||
- Upgrade Anchor to v0.24.2
|
||||
|
||||
## v0.2.3 - 2022-4-29 - not on mainnet
|
||||
|
||||
### Program
|
||||
- Use spl-governance 2.2.1 as dependency, instead of a specific commit.
|
||||
|
||||
### Typescript Client
|
||||
- Upgrade the Anchor dependency to v0.24.2
|
||||
|
||||
## v0.2.2 - skipped
|
||||
|
||||
## v0.2.1 - 2022-4-3 - mainnet deploy slot 129520307
|
||||
|
||||
### Program
|
||||
- Increase the maximum number of lockup periods to 200 * 365 to allow for 200-year cliff and
|
||||
constant lockups.
|
||||
- Add a function to compute the guaranteed locked vote power bonus. This is unused by the
|
||||
program itself, but helpful for programs that want to provide benefits based on a user's
|
||||
lockup amount and time.
|
||||
|
||||
### Other
|
||||
- Add cli tool to decode voter accounts.
|
||||
- Update dependencies.
|
||||
|
||||
|
||||
## v0.2.0 - 2022-2-14 - mainnet deploy slot 121129331
|
||||
|
||||
- First release.
|
||||
- Available on devnet at 4Q6WW2ouZ6V3iaNm56MTd5n2tnTm4C5fiH8miFHnAFHo
|
||||
- In use by the Mango DAO on mainnet at the same address.
|
|
@ -46,9 +46,9 @@ checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd"
|
|||
|
||||
[[package]]
|
||||
name = "anchor-attribute-access-control"
|
||||
version = "0.20.1"
|
||||
version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "105c443a613f29212755fb6c5f946fa82dcf94a80528f643e0faa9d9faeb626b"
|
||||
checksum = "a9b75d05b6b4ac9d95bb6e3b786b27d3a708c4c5a87c92ffaa25bbe9ae4c5d91"
|
||||
dependencies = [
|
||||
"anchor-syn",
|
||||
"anyhow",
|
||||
|
@ -60,9 +60,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "anchor-attribute-account"
|
||||
version = "0.20.1"
|
||||
version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fdae15851aa41972e9c18c987613c50a916c48c88c97ea3316156a5c772e5faa"
|
||||
checksum = "485351a6d8157750d10d88c8e256f1bf8339262b2220ae9125aed3471309b5de"
|
||||
dependencies = [
|
||||
"anchor-syn",
|
||||
"anyhow",
|
||||
|
@ -75,9 +75,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "anchor-attribute-constant"
|
||||
version = "0.20.1"
|
||||
version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6356865217881d0bbea8aa70625937bec6d9952610f1ba2a2452a8e427000687"
|
||||
checksum = "dc632c540913dd051a78b00587cc47f57013d303163ddfaf4fa18717f7ccc1e0"
|
||||
dependencies = [
|
||||
"anchor-syn",
|
||||
"proc-macro2",
|
||||
|
@ -86,9 +86,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "anchor-attribute-error"
|
||||
version = "0.20.1"
|
||||
version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ebe998ce4e6e0cb0e291d1a1626bd30791cdfdd9d05523111bdf4fd053f08636"
|
||||
checksum = "3b5bd1dcfa7f3bc22dacef233d70a9e0bee269c4ac484510662f257cba2353a1"
|
||||
dependencies = [
|
||||
"anchor-syn",
|
||||
"proc-macro2",
|
||||
|
@ -98,9 +98,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "anchor-attribute-event"
|
||||
version = "0.20.1"
|
||||
version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c5810498a20554c20354f5648b6041172f2035e58d09ad40dc051dc0d1501f80"
|
||||
checksum = "6c6f9e6ce551ac9a177a45c99a65699a860c9e95fac68675138af1246e2591b0"
|
||||
dependencies = [
|
||||
"anchor-syn",
|
||||
"anyhow",
|
||||
|
@ -111,9 +111,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "anchor-attribute-interface"
|
||||
version = "0.20.1"
|
||||
version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ac83f085b2be8b3a3412989cf96cf7f683561db7d357c5aa4aa11d48bbb22213"
|
||||
checksum = "d104aa17418cb329ed7418b227e083d5f326a27f26ce98f5d92e33da62a5f459"
|
||||
dependencies = [
|
||||
"anchor-syn",
|
||||
"anyhow",
|
||||
|
@ -125,9 +125,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "anchor-attribute-program"
|
||||
version = "0.20.1"
|
||||
version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "73c56be575d89abcb192afa29deb87b2cdb3c39033abc02f2d16e6af999b23b7"
|
||||
checksum = "b6831b920b173c004ddf7ae1167d1d25e9f002ffcb1773bbc5c7ce532a4441e1"
|
||||
dependencies = [
|
||||
"anchor-syn",
|
||||
"anyhow",
|
||||
|
@ -138,9 +138,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "anchor-attribute-state"
|
||||
version = "0.20.1"
|
||||
version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "62ab002353b01fcb4f72cca256d5d62db39f9ff39b1d072280deee9798f1f524"
|
||||
checksum = "cde147b10c71d95dc679785db0b5f3abac0091f789167aa62ac0135e2f54e8b9"
|
||||
dependencies = [
|
||||
"anchor-syn",
|
||||
"anyhow",
|
||||
|
@ -151,9 +151,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "anchor-derive-accounts"
|
||||
version = "0.20.1"
|
||||
version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e9e653cdb322078d95221384c4a527a403560e509ac7cb2b53d3bd664b23c4d6"
|
||||
checksum = "9cde98a0e1a56046b040ff591dfda391f88917af2b6487d02b45093c05be3514"
|
||||
dependencies = [
|
||||
"anchor-syn",
|
||||
"anyhow",
|
||||
|
@ -164,9 +164,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "anchor-lang"
|
||||
version = "0.20.1"
|
||||
version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4815ad6334fd2f561f7ddcc3cfbeed87ed3003724171bd80ebe6383d5173ee8f"
|
||||
checksum = "a85dd2c5e29e20c7f4701a43724d6cd5406d0ee5694705522e43da0f26542a84"
|
||||
dependencies = [
|
||||
"anchor-attribute-access-control",
|
||||
"anchor-attribute-account",
|
||||
|
@ -188,21 +188,21 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "anchor-spl"
|
||||
version = "0.20.1"
|
||||
version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9ea94b04fc9a0aaae4d4473b0595fb5f55b6c9b38e0d6f596df8c8060f95f096"
|
||||
checksum = "0188c33b4a3c124c4e593f2b440415aaea70a7650fac6ba0772395385d71c003"
|
||||
dependencies = [
|
||||
"anchor-lang",
|
||||
"solana-program",
|
||||
"spl-associated-token-account",
|
||||
"spl-token 3.2.0",
|
||||
"spl-token",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anchor-syn"
|
||||
version = "0.20.1"
|
||||
version = "0.24.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3be7bfb6991d79cce3495fb6ce0892f58a5c75a74c8d1c2fc6f62926066eb9f4"
|
||||
checksum = "03549dc2eae0b20beba6333b14520e511822a6321cdb1760f841064a69347316"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bs58 0.3.1",
|
||||
|
@ -431,18 +431,18 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "bytemuck"
|
||||
version = "1.7.2"
|
||||
version = "1.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "72957246c41db82b8ef88a5486143830adeb8227ef9837740bdec67724cf2c5b"
|
||||
checksum = "cdead85bdec19c194affaeeb670c0e41fe23de31459efd1c174d049269cf02cc"
|
||||
dependencies = [
|
||||
"bytemuck_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bytemuck_derive"
|
||||
version = "1.0.1"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e215f8c2f9f79cb53c8335e687ffd07d5bfcb6fe5fc80723762d0be46e7cc54"
|
||||
checksum = "562e382481975bc61d11275ac5e62a19abd00b0547d99516a415336f183dcd0e"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -833,26 +833,6 @@ dependencies = [
|
|||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "enum-iterator"
|
||||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4eeac5c5edb79e4e39fe8439ef35207780a11f69c52cbe424ce3dfad4cb78de6"
|
||||
dependencies = [
|
||||
"enum-iterator-derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "enum-iterator-derive"
|
||||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "enum-ordinalize"
|
||||
version = "3.1.10"
|
||||
|
@ -1985,9 +1965,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "1.5.4"
|
||||
version = "1.5.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
|
||||
checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
|
@ -2285,9 +2265,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-address-lookup-table-program"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0369417da252129c0bc74e818beb11e84a6b6aecd517b29d2c2808cddca1492b"
|
||||
checksum = "e0d3ae01e1aa350228312868f4275460bd6f2945fe3b0ebf4d86f8e1d0b02acd"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"bytemuck",
|
||||
|
@ -2305,9 +2285,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-banks-client"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f3d4cf0f95bfbc40e6983c5a530476275d0f5b95b7db04173b0a5ac7977eaf00"
|
||||
checksum = "f355273a7898a93be213d1fc24b35eef385cdb97260b506b3831e36c9a0bfa3a"
|
||||
dependencies = [
|
||||
"borsh",
|
||||
"futures",
|
||||
|
@ -2322,9 +2302,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-banks-interface"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7fff2fed480f0b0698678c76d51d6adf66d6398c05cc7fdf1b65ac80f18e218c"
|
||||
checksum = "27e8ee8f457f0e4ea18a3a2ba8c454d4fd3126cea9630a6f17de36ee5b61c892"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"solana-sdk",
|
||||
|
@ -2333,9 +2313,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-banks-server"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "22ab002c21afd114317fab2f21251ce5d7937692b903ed6856923dc580bdfb8d"
|
||||
checksum = "134b7366ee56251c4f312104f77af725d5855072ec5d114fddff5a19b461fe42"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"futures",
|
||||
|
@ -2351,9 +2331,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-bloom"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e725d8fb099cc9972dce4228e1128a2d31676a5e4bfa753912c306cdc502ea49"
|
||||
checksum = "60d9e40fa9c8f2faa0a52c3777ce06df43250b43901a38bfee057e9eae340d04"
|
||||
dependencies = [
|
||||
"bv",
|
||||
"fnv",
|
||||
|
@ -2370,9 +2350,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-bpf-loader-program"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8df32772715fec1e153ce9a5a965785322686fd80e60d7e023d24cd3def1f6d1"
|
||||
checksum = "fa9a05b8a19e803d9d05d8df3a58e98280b52977b17211459e36c36386990059"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"byteorder",
|
||||
|
@ -2388,9 +2368,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-bucket-map"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "87db847d4b8d38920625cc1f35caf6a65d684db93f1ef3810fbe059c772a8a66"
|
||||
checksum = "fe1d8d78cc13320db78606dda3699143ceb7a2c4685d43522d7848a54af7b66d"
|
||||
dependencies = [
|
||||
"fs_extra",
|
||||
"log",
|
||||
|
@ -2405,9 +2385,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-compute-budget-program"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "63c4955206f7f19d0462f49c1001af4aa867e8de106170f8ebbb6db373579b4e"
|
||||
checksum = "4b14d59fffbd8fcf666d7ebd977c289f072acd735a890226d32bfaa9e318edb3"
|
||||
dependencies = [
|
||||
"solana-program-runtime",
|
||||
"solana-sdk",
|
||||
|
@ -2415,9 +2395,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-config-program"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b48ae3996c82a7b4a0552ba4a19871cddb00a440e5b50b0e4afb8c56f7865c92"
|
||||
checksum = "e1a3634cfb004b1698b34d17aad6a7c13f272242d332608748bae3bd4adf05e2"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"chrono",
|
||||
|
@ -2429,9 +2409,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-frozen-abi"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fbb58e258da28e714904b62a1e8b7de5b01d349420a88409c84cb57264699021"
|
||||
checksum = "3129f7367168973c21989602df241bfbf890450d2d8912b9b07e820101a070eb"
|
||||
dependencies = [
|
||||
"bs58 0.4.0",
|
||||
"bv",
|
||||
|
@ -2449,9 +2429,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-frozen-abi-macro"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7f9c141ee23138a001bf94a9850fff3c8804e52fa36c151a8a4699f60bd55f74"
|
||||
checksum = "d03ddde7f8bcc5a3847de5723efae88aea18931e559611a8cb0827d9add83f96"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -2461,9 +2441,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-logger"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "72b63b04c1a2077f2eadb3c63988a14bc4fa4419f291fea7112a9c595db1e63b"
|
||||
checksum = "8151da49e5338abba3cac5fbeda754e0ff02dfe2e6ac26f76928d0435170b6fc"
|
||||
dependencies = [
|
||||
"env_logger",
|
||||
"lazy_static",
|
||||
|
@ -2472,9 +2452,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-measure"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f8b1bfded346a894946ca4055da1ed3c09cf6878292afc2c5f011290a65cd713"
|
||||
checksum = "5f2bb4fc58acc5eb0200bdc2e47ab0d087342f40c412cdb06e6389f97af276b2"
|
||||
dependencies = [
|
||||
"log",
|
||||
"solana-sdk",
|
||||
|
@ -2482,9 +2462,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-metrics"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4c90c25622d5a2ceca6769cb0c3d4038c0b1e54ac1257c19ad9818cb40e4283a"
|
||||
checksum = "389a663316a2c28be5947fd4e2d1f7ee6eecda6d1c24b08188546f31825861d4"
|
||||
dependencies = [
|
||||
"env_logger",
|
||||
"gethostname",
|
||||
|
@ -2496,9 +2476,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-program"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0c41b2af0be4fc039852c74926a8a026e97f9b1d7c02c15610bb6a614268a4ea"
|
||||
checksum = "3981394cc258fe1cb058b75bd5031eff01140ba0fa9b5a802b5c30f439ebeeba"
|
||||
dependencies = [
|
||||
"base64 0.13.0",
|
||||
"bincode",
|
||||
|
@ -2539,9 +2519,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-program-runtime"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ce923873f6b36649cebbb047b4b99c0005666bae32db24625b3dbd3d1908e98e"
|
||||
checksum = "7e0d4527c5b9203357e1bc070279b2714b6cc1abd5cd9c2264159f6cc7386eaa"
|
||||
dependencies = [
|
||||
"base64 0.13.0",
|
||||
"bincode",
|
||||
|
@ -2563,9 +2543,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-program-test"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6006d2fb499a3d2ae528ece71688409e24f7d11e97fb5d4b3059f64ec54ce8f4"
|
||||
checksum = "d554d670d40add2b09e86edccdf955714dd3ec8b6c44bb7284f43509b5229c4c"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"base64 0.12.3",
|
||||
|
@ -2587,9 +2567,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-rayon-threadlimit"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8460f02bf10feb60704c0eb6874fa1cc36246d832b28ea481cda94aa5860e5e8"
|
||||
checksum = "cbd6c70547188458e12a576d387d925b03dcdc7f9c7eac84473dbb0c3805264c"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
"num_cpus",
|
||||
|
@ -2597,20 +2577,20 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-runtime"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b8f83c92b1b55719ebff972a45e22cbe6a808760cc1ac2dac8ddd53ee3694d3e"
|
||||
checksum = "a22926084f4843a42a651b7744b9b5b620e60dee3ddf46e0257dceb3c47b04be"
|
||||
dependencies = [
|
||||
"arrayref",
|
||||
"bincode",
|
||||
"blake3",
|
||||
"bv",
|
||||
"bytemuck",
|
||||
"byteorder",
|
||||
"bzip2",
|
||||
"crossbeam-channel",
|
||||
"dashmap",
|
||||
"dir-diff",
|
||||
"enum-iterator",
|
||||
"flate2",
|
||||
"fnv",
|
||||
"index_list",
|
||||
|
@ -2652,9 +2632,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-sdk"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "73ca3ff8e6bf6ccb39dfbb834601febc1c872e9ffd5c7e25fb9fe636a67e9690"
|
||||
checksum = "8f0b4eb7e8574748aa1f2c1c99594abfa97bfe21f1355e5f2ad5341ad1984cb7"
|
||||
dependencies = [
|
||||
"assert_matches",
|
||||
"base64 0.13.0",
|
||||
|
@ -2703,9 +2683,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-sdk-macro"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "238b93350286f73c2bd94c1a307bb0226a2f78070937bcf273bf968859f8cc39"
|
||||
checksum = "7584154d8716cc4b2ad3cf7df3cf8e2be2639f85a0e63e6440eebc33cee97291"
|
||||
dependencies = [
|
||||
"bs58 0.4.0",
|
||||
"proc-macro2",
|
||||
|
@ -2716,9 +2696,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-send-transaction-service"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "28357ff694194267f520a872a568c948a94aa1ef67974bdfbb78b7cdb7325d7d"
|
||||
checksum = "8a736c40e28b8cb0d13a747e06a74e3c96fe836202c708f63d3e7bca65dfeb49"
|
||||
dependencies = [
|
||||
"log",
|
||||
"solana-logger",
|
||||
|
@ -2729,9 +2709,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-stake-program"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "123b42d0785e39363ba6337561e6f9e0a5970d918a6292cc24b7e71e75e41136"
|
||||
checksum = "6ced08967dd1d702f0d11bc68c704722000267fe90eb1991f7a8632d20866163"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"log",
|
||||
|
@ -2752,9 +2732,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana-vote-program"
|
||||
version = "1.9.5"
|
||||
version = "1.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0c618782e54ec7d65e13531a576b7fd49352cbfc0d8d082badd65d280534ea35"
|
||||
checksum = "288e3fe7fd38b2542fc1751bb738e4b7d08f77b6974c62bcaee320ebfa6c32a2"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"log",
|
||||
|
@ -2774,9 +2754,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "solana_rbpf"
|
||||
version = "0.2.21"
|
||||
version = "0.2.24"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8fb565d026461ba89d1d92cc36cf0882fba44076559c3bbed1e8a9888112b3d7"
|
||||
checksum = "41e138f6d6d4eb6a65f8e9f01ca620bc9907d79648d5038a69dd3f07b6ed3f1f"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
"combine",
|
||||
|
@ -2804,13 +2784,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "393e2240d521c3dd770806bff25c2c00d761ac962be106e14e22dd912007f428"
|
||||
dependencies = [
|
||||
"solana-program",
|
||||
"spl-token 3.2.0",
|
||||
"spl-token",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "spl-governance"
|
||||
version = "2.2.0"
|
||||
source = "git+https://github.com/solana-labs/solana-program-library?rev=4c0bc4c968d5d6feaee18b1c633c636f20d66b15#4c0bc4c968d5d6feaee18b1c633c636f20d66b15"
|
||||
version = "2.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c13bfa6d1b1e922fe0dca06ec53a43fd56706906586fe8d0154f420c78af5aa"
|
||||
dependencies = [
|
||||
"arrayref",
|
||||
"bincode",
|
||||
|
@ -2822,14 +2803,15 @@ dependencies = [
|
|||
"solana-program",
|
||||
"spl-governance-addin-api",
|
||||
"spl-governance-tools",
|
||||
"spl-token 3.3.0",
|
||||
"spl-token",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "spl-governance-addin-api"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/solana-labs/solana-program-library?rev=4c0bc4c968d5d6feaee18b1c633c636f20d66b15#4c0bc4c968d5d6feaee18b1c633c636f20d66b15"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9451f56e707e635a40a285965e1927733c956a0049a08f4b6c80215445aba7f1"
|
||||
dependencies = [
|
||||
"borsh",
|
||||
"solana-program",
|
||||
|
@ -2838,8 +2820,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "spl-governance-tools"
|
||||
version = "0.1.1"
|
||||
source = "git+https://github.com/solana-labs/solana-program-library?rev=4c0bc4c968d5d6feaee18b1c633c636f20d66b15#4c0bc4c968d5d6feaee18b1c633c636f20d66b15"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6a206f0837415046d919f3075d6b3af9bd3f1f707c887898c335a6210b194627"
|
||||
dependencies = [
|
||||
"arrayref",
|
||||
"bincode",
|
||||
|
@ -2849,28 +2832,15 @@ dependencies = [
|
|||
"serde",
|
||||
"serde_derive",
|
||||
"solana-program",
|
||||
"spl-token 3.3.0",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "spl-token"
|
||||
version = "3.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "93bfdd5bd7c869cb565c7d7635c4fafe189b988a0bdef81063cd9585c6b8dc01"
|
||||
dependencies = [
|
||||
"arrayref",
|
||||
"num-derive",
|
||||
"num-traits",
|
||||
"num_enum",
|
||||
"solana-program",
|
||||
"spl-token",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "spl-token"
|
||||
version = "3.3.0"
|
||||
source = "git+https://github.com/solana-labs/solana-program-library?rev=4c0bc4c968d5d6feaee18b1c633c636f20d66b15#4c0bc4c968d5d6feaee18b1c633c636f20d66b15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0cc67166ef99d10c18cb5e9c208901e6d8255c6513bb1f877977eba48e6cc4fb"
|
||||
dependencies = [
|
||||
"arrayref",
|
||||
"num-derive",
|
||||
|
@ -3308,7 +3278,7 @@ checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
|
|||
|
||||
[[package]]
|
||||
name = "voter-stake-registry"
|
||||
version = "0.2.0"
|
||||
version = "0.2.4"
|
||||
dependencies = [
|
||||
"anchor-lang",
|
||||
"anchor-spl",
|
||||
|
@ -3325,13 +3295,13 @@ dependencies = [
|
|||
"spl-associated-token-account",
|
||||
"spl-governance",
|
||||
"spl-governance-addin-api",
|
||||
"spl-token 3.2.0",
|
||||
"spl-token",
|
||||
"static_assertions",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "voter-stake-registry-cli"
|
||||
version = "0.2.0"
|
||||
version = "0.2.4"
|
||||
dependencies = [
|
||||
"anchor-lang",
|
||||
"anyhow",
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
[workspace]
|
||||
members = [
|
||||
"programs/*",
|
||||
# Drop everything below this line before running "anchor publish":
|
||||
# Otherwise the build will fail since Anchor uploads only parts of the source tree.
|
||||
"cli/"
|
||||
]
|
||||
|
|
|
@ -0,0 +1,675 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
[package]
|
||||
name = "voter-stake-registry-cli"
|
||||
version = "0.2.0"
|
||||
version = "0.2.4"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
voter-stake-registry = { path = "../programs/voter-stake-registry", features = ["no-entrypoint"] }
|
||||
|
||||
anchor-lang = "0.20.1"
|
||||
anchor-lang = "0.24.2"
|
||||
|
||||
serde = "^1.0"
|
||||
serde_json = "^1.0"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@blockworks-foundation/voter-stake-registry-client",
|
||||
"version": "0.2.0",
|
||||
"version": "0.2.4",
|
||||
"description": "Client for Voter-stake-registry which is a voter weight addin for Solana's spl-governance program.",
|
||||
"main": "lib/src/index.js",
|
||||
"types": "lib/src/index.d.ts",
|
||||
|
@ -36,7 +36,7 @@
|
|||
"trailingComma": "all"
|
||||
},
|
||||
"dependencies": {
|
||||
"@project-serum/anchor": "^0.18.0",
|
||||
"@project-serum/anchor": "^0.24.2",
|
||||
"@project-serum/serum": "^0.13.61"
|
||||
},
|
||||
"license": "MIT"
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
[package]
|
||||
name = "voter-stake-registry"
|
||||
version = "0.2.0"
|
||||
description = "Created with Anchor"
|
||||
version = "0.2.4"
|
||||
description = "a voter weight plugin for spl-governance"
|
||||
license = "GPL-3.0-or-later"
|
||||
homepage = "https://github.com/blockworks-foundation/voter-stake-registry"
|
||||
edition = "2018"
|
||||
|
||||
[lib]
|
||||
|
@ -19,8 +21,8 @@ test-bpf = []
|
|||
|
||||
[dependencies]
|
||||
# a) for deployment use these
|
||||
anchor-lang = "0.20.1"
|
||||
anchor-spl = { version = "0.20.1" }
|
||||
anchor-lang = { version = "0.24.2", features = ["init-if-needed"] }
|
||||
anchor-spl = { version = "0.24.2" }
|
||||
# b) while testing, use below dependencies for debugging instead of above ones
|
||||
# anchor-lang = { git = "https://github.com/microwavedcola1/anchor.git", branch = "master-debug" }
|
||||
# anchor-spl = { git = "https://github.com/microwavedcola1/anchor.git", branch = "master-debug", features = ["governance"]}
|
||||
|
@ -28,20 +30,22 @@ anchor-spl = { version = "0.20.1" }
|
|||
# The rev used for spl-governance must match what the fixture binary
|
||||
# programs/voter-stake-registry/tests/fixtures/spl_governance.so is built from.
|
||||
|
||||
# spl-governance 2.2.0 TODO: Upgrade Anchor to spl-token 3.3.0 to refernce directly
|
||||
spl-governance = { git = "https://github.com/solana-labs/solana-program-library", rev = "4c0bc4c968d5d6feaee18b1c633c636f20d66b15", features = ["no-entrypoint"] }
|
||||
bytemuck = "1.9.1"
|
||||
|
||||
# spl-governance-addin-api 0.1.0 TODO: Upgrade Anchor to spl-token 3.3.0
|
||||
spl-governance-addin-api = { git = "https://github.com/solana-labs/solana-program-library", rev = "4c0bc4c968d5d6feaee18b1c633c636f20d66b15" }
|
||||
# WARNING: Be careful about upgrading the spl-governance dependency!
|
||||
# Recently the discriminator for new VoterWeightRecord accounts has changed, and upgrading
|
||||
# this dependency here without also upgrading the spl-governance program instance beforehand
|
||||
# would lead to VWR accounts that are unusable until the spl-governance program is upgraded.
|
||||
spl-governance = { version = "=2.2.1", features = ["no-entrypoint"] }
|
||||
spl-governance-addin-api = "=0.1.1"
|
||||
|
||||
# refer solana to the same version anchor-lang 0.20.1 refers to
|
||||
solana-program = "1.9.5"
|
||||
solana-program = "~1.9.13"
|
||||
static_assertions = "1.1"
|
||||
|
||||
[dev-dependencies]
|
||||
solana-sdk = "1.9.5"
|
||||
solana-program-test = "1.9.5"
|
||||
solana-logger = "1.9.5"
|
||||
solana-sdk = "~1.9.13"
|
||||
solana-program-test = "~1.9.13"
|
||||
solana-logger = "~1.9.13"
|
||||
spl-token = { version = "^3.0.0", features = ["no-entrypoint"] }
|
||||
spl-associated-token-account = { version = "^1.0.3", features = ["no-entrypoint"] }
|
||||
bytemuck = "^1.7.2"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
use anchor_lang::prelude::*;
|
||||
|
||||
#[error]
|
||||
pub enum ErrorCode {
|
||||
#[error_code]
|
||||
pub enum VsrError {
|
||||
// 6000 / 0x1770
|
||||
#[msg("Exchange rate must be greater than zero")]
|
||||
InvalidRate,
|
||||
|
@ -113,4 +113,7 @@ pub enum ErrorCode {
|
|||
// 6036 / 0x1794
|
||||
#[msg("")]
|
||||
VaultTokenNonZero,
|
||||
// 6037 / 0x1795
|
||||
#[msg("")]
|
||||
InvalidTimestampArguments,
|
||||
}
|
||||
|
|
|
@ -7,35 +7,30 @@ macro_rules! vote_weight_record {
|
|||
pub struct VoterWeightRecord(spl_governance_addin_api::voter_weight::VoterWeightRecord);
|
||||
|
||||
impl anchor_lang::AccountDeserialize for VoterWeightRecord {
|
||||
fn try_deserialize(buf: &mut &[u8]) -> std::result::Result<Self, ProgramError> {
|
||||
fn try_deserialize(buf: &mut &[u8]) -> anchor_lang::Result<Self> {
|
||||
let mut data = buf;
|
||||
let vwr: spl_governance_addin_api::voter_weight::VoterWeightRecord =
|
||||
anchor_lang::AnchorDeserialize::deserialize(&mut data)
|
||||
.map_err(|_| anchor_lang::__private::ErrorCode::AccountDidNotDeserialize)?;
|
||||
.map_err(|_| anchor_lang::error::ErrorCode::AccountDidNotDeserialize)?;
|
||||
if !solana_program::program_pack::IsInitialized::is_initialized(&vwr) {
|
||||
return Err(anchor_lang::__private::ErrorCode::AccountDidNotSerialize.into());
|
||||
return Err(anchor_lang::error::ErrorCode::AccountDidNotSerialize.into());
|
||||
}
|
||||
Ok(VoterWeightRecord(vwr))
|
||||
}
|
||||
|
||||
fn try_deserialize_unchecked(
|
||||
buf: &mut &[u8],
|
||||
) -> std::result::Result<Self, ProgramError> {
|
||||
fn try_deserialize_unchecked(buf: &mut &[u8]) -> anchor_lang::Result<Self> {
|
||||
let mut data = buf;
|
||||
let vwr: spl_governance_addin_api::voter_weight::VoterWeightRecord =
|
||||
anchor_lang::AnchorDeserialize::deserialize(&mut data)
|
||||
.map_err(|_| anchor_lang::__private::ErrorCode::AccountDidNotDeserialize)?;
|
||||
.map_err(|_| anchor_lang::error::ErrorCode::AccountDidNotDeserialize)?;
|
||||
Ok(VoterWeightRecord(vwr))
|
||||
}
|
||||
}
|
||||
|
||||
impl anchor_lang::AccountSerialize for VoterWeightRecord {
|
||||
fn try_serialize<W: std::io::Write>(
|
||||
&self,
|
||||
writer: &mut W,
|
||||
) -> std::result::Result<(), ProgramError> {
|
||||
fn try_serialize<W: std::io::Write>(&self, writer: &mut W) -> anchor_lang::Result<()> {
|
||||
anchor_lang::AnchorSerialize::serialize(&self.0, writer)
|
||||
.map_err(|_| anchor_lang::__private::ErrorCode::AccountDidNotSerialize)?;
|
||||
.map_err(|_| anchor_lang::error::ErrorCode::AccountDidNotSerialize)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,16 +65,17 @@ pub fn clawback(ctx: Context<Clawback>, deposit_entry_index: u8) -> Result<()> {
|
|||
let deposit_entry = voter.active_deposit_mut(deposit_entry_index)?;
|
||||
require!(
|
||||
deposit_entry.allow_clawback,
|
||||
ErrorCode::ClawbackNotAllowedOnDeposit
|
||||
VsrError::ClawbackNotAllowedOnDeposit
|
||||
);
|
||||
|
||||
let curr_ts = registrar.clock_unix_timestamp();
|
||||
let locked_amount = deposit_entry.amount_locked(curr_ts);
|
||||
|
||||
// Update deposit book keeping.
|
||||
require!(
|
||||
locked_amount <= deposit_entry.amount_deposited_native,
|
||||
InternalProgramError
|
||||
require_gte!(
|
||||
deposit_entry.amount_deposited_native,
|
||||
locked_amount,
|
||||
VsrError::InternalProgramError
|
||||
);
|
||||
deposit_entry.amount_deposited_native -= locked_amount;
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ pub struct CloseDepositEntry<'info> {
|
|||
pub fn close_deposit_entry(ctx: Context<CloseDepositEntry>, deposit_entry_index: u8) -> Result<()> {
|
||||
let voter = &mut ctx.accounts.voter.load_mut()?;
|
||||
let d = voter.active_deposit_mut(deposit_entry_index)?;
|
||||
require!(d.amount_deposited_native == 0, VotingTokenNonZero);
|
||||
require_eq!(d.amount_deposited_native, 0, VsrError::VotingTokenNonZero);
|
||||
|
||||
// Deposits that have clawback enabled are guaranteed to live until the end
|
||||
// of their locking period. That ensures a deposit can't be closed and reopenend
|
||||
|
@ -32,7 +32,7 @@ pub fn close_deposit_entry(ctx: Context<CloseDepositEntry>, deposit_entry_index:
|
|||
if d.allow_clawback {
|
||||
require!(
|
||||
d.lockup.expired(Clock::get()?.unix_timestamp),
|
||||
DepositStillLocked
|
||||
VsrError::DepositStillLocked
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
use std::ops::DerefMut;
|
||||
|
||||
use crate::error::*;
|
||||
use crate::state::*;
|
||||
use anchor_lang::prelude::*;
|
||||
use anchor_spl::token::{self, CloseAccount, Token, TokenAccount};
|
||||
use bytemuck::bytes_of_mut;
|
||||
|
||||
// Remaining accounts must be all the token token accounts owned by voter, he wants to close,
|
||||
// they should be writable so that they can be closed and sol required for rent
|
||||
|
@ -17,7 +20,8 @@ pub struct CloseVoter<'info> {
|
|||
seeds = [voter.load()?.registrar.key().as_ref(), b"voter".as_ref(), voter_authority.key().as_ref()],
|
||||
bump = voter.load()?.voter_bump,
|
||||
has_one = voter_authority,
|
||||
close = sol_destination)]
|
||||
close = sol_destination
|
||||
)]
|
||||
pub voter: AccountLoader<'info, Voter>,
|
||||
|
||||
pub voter_authority: Signer<'info>,
|
||||
|
@ -34,31 +38,46 @@ pub struct CloseVoter<'info> {
|
|||
pub fn close_voter<'key, 'accounts, 'remaining, 'info>(
|
||||
ctx: Context<'key, 'accounts, 'remaining, 'info, CloseVoter<'info>>,
|
||||
) -> Result<()> {
|
||||
let voter = &ctx.accounts.voter.load()?;
|
||||
let amount = voter.deposits.iter().fold(0u64, |sum, d| {
|
||||
sum.checked_add(d.amount_deposited_native).unwrap()
|
||||
});
|
||||
require!(amount == 0, VotingTokenNonZero);
|
||||
{
|
||||
let voter = ctx.accounts.voter.load()?;
|
||||
let amount = voter.deposits.iter().fold(0u64, |sum, d| {
|
||||
sum.checked_add(d.amount_deposited_native).unwrap()
|
||||
});
|
||||
require_eq!(amount, 0, VsrError::VotingTokenNonZero);
|
||||
|
||||
let voter_seeds = voter_seeds!(voter);
|
||||
for account in &mut ctx.remaining_accounts.iter() {
|
||||
let token = Account::<TokenAccount>::try_from(&account.clone()).unwrap();
|
||||
require!(token.owner == ctx.accounts.voter.key(), InvalidAuthority);
|
||||
require!(token.amount == 0, VaultTokenNonZero);
|
||||
let voter_seeds = voter_seeds!(voter);
|
||||
for account in &mut ctx.remaining_accounts.iter() {
|
||||
let token = Account::<TokenAccount>::try_from(&account.clone()).unwrap();
|
||||
require_keys_eq!(
|
||||
token.owner,
|
||||
ctx.accounts.voter.key(),
|
||||
VsrError::InvalidAuthority
|
||||
);
|
||||
require_eq!(token.amount, 0, VsrError::VaultTokenNonZero);
|
||||
|
||||
let cpi_accounts = CloseAccount {
|
||||
account: account.to_account_info(),
|
||||
destination: ctx.accounts.sol_destination.to_account_info(),
|
||||
authority: ctx.accounts.voter.to_account_info(),
|
||||
};
|
||||
let cpi_program = ctx.accounts.token_program.to_account_info();
|
||||
token::close_account(CpiContext::new_with_signer(
|
||||
cpi_program,
|
||||
cpi_accounts,
|
||||
&[voter_seeds],
|
||||
))?;
|
||||
let cpi_accounts = CloseAccount {
|
||||
account: account.to_account_info(),
|
||||
destination: ctx.accounts.sol_destination.to_account_info(),
|
||||
authority: ctx.accounts.voter.to_account_info(),
|
||||
};
|
||||
let cpi_program = ctx.accounts.token_program.to_account_info();
|
||||
token::close_account(CpiContext::new_with_signer(
|
||||
cpi_program,
|
||||
cpi_accounts,
|
||||
&[voter_seeds],
|
||||
))?;
|
||||
|
||||
account.exit(ctx.program_id)?;
|
||||
account.exit(ctx.program_id)?;
|
||||
}
|
||||
}
|
||||
|
||||
// zero out voter account to prevent reinit attacks
|
||||
// appease rust borrow checker
|
||||
{
|
||||
let mut voter = ctx.accounts.voter.load_mut()?;
|
||||
let voter_dereffed = voter.deref_mut();
|
||||
let voter_bytes = bytes_of_mut(voter_dereffed);
|
||||
voter_bytes.fill(0);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
|
|
@ -78,22 +78,31 @@ pub fn configure_voting_mint(
|
|||
lockup_saturation_secs: u64,
|
||||
grant_authority: Option<Pubkey>,
|
||||
) -> Result<()> {
|
||||
require!(lockup_saturation_secs > 0, LockupSaturationMustBePositive);
|
||||
require_gt!(
|
||||
lockup_saturation_secs,
|
||||
0,
|
||||
VsrError::LockupSaturationMustBePositive
|
||||
);
|
||||
let registrar = &mut ctx.accounts.registrar.load_mut()?;
|
||||
let mint = ctx.accounts.mint.key();
|
||||
let idx = idx as usize;
|
||||
require!(
|
||||
idx < registrar.voting_mints.len(),
|
||||
OutOfBoundsVotingMintConfigIndex
|
||||
require_gt!(
|
||||
registrar.voting_mints.len(),
|
||||
idx,
|
||||
VsrError::OutOfBoundsVotingMintConfigIndex
|
||||
);
|
||||
|
||||
// Either it's reconfiguring an existing mint with the correct index,
|
||||
// or configuring a new mint on an unused index.
|
||||
match registrar.voting_mint_config_index(mint) {
|
||||
Ok(existing_idx) => require!(existing_idx == idx, VotingMintConfiguredWithDifferentIndex),
|
||||
Ok(existing_idx) => require_eq!(
|
||||
existing_idx,
|
||||
idx,
|
||||
VsrError::VotingMintConfiguredWithDifferentIndex
|
||||
),
|
||||
Err(_) => require!(
|
||||
!registrar.voting_mints[idx].in_use(),
|
||||
VotingMintConfigIndexAlreadyInUse
|
||||
VsrError::VotingMintConfigIndexAlreadyInUse
|
||||
),
|
||||
};
|
||||
|
||||
|
|
|
@ -72,12 +72,13 @@ pub fn create_deposit_entry(
|
|||
let mint_idx = registrar.voting_mint_config_index(ctx.accounts.deposit_mint.key())?;
|
||||
|
||||
// Get and set up the deposit entry.
|
||||
require!(
|
||||
voter.deposits.len() > deposit_entry_index as usize,
|
||||
OutOfBoundsDepositEntryIndex
|
||||
require_gt!(
|
||||
voter.deposits.len(),
|
||||
deposit_entry_index as usize,
|
||||
VsrError::OutOfBoundsDepositEntryIndex
|
||||
);
|
||||
let d_entry = &mut voter.deposits[deposit_entry_index as usize];
|
||||
require!(!d_entry.is_used, UnusedDepositEntryIndex);
|
||||
require!(!d_entry.is_used, VsrError::UnusedDepositEntryIndex);
|
||||
|
||||
let curr_ts = registrar.clock_unix_timestamp();
|
||||
let start_ts = if let Some(v) = start_ts {
|
||||
|
|
|
@ -6,14 +6,13 @@ use spl_governance::state::realm;
|
|||
use std::mem::size_of;
|
||||
|
||||
#[derive(Accounts)]
|
||||
#[instruction(registrar_bump: u8)]
|
||||
pub struct CreateRegistrar<'info> {
|
||||
/// The voting registrar. There can only be a single registrar
|
||||
/// per governance realm and governing mint.
|
||||
#[account(
|
||||
init,
|
||||
seeds = [realm.key().as_ref(), b"registrar".as_ref(), realm_governing_token_mint.key().as_ref()],
|
||||
bump = registrar_bump,
|
||||
bump,
|
||||
payer = payer,
|
||||
space = 8 + size_of::<Registrar>()
|
||||
)]
|
||||
|
@ -49,6 +48,7 @@ pub struct CreateRegistrar<'info> {
|
|||
/// used for voting.
|
||||
pub fn create_registrar(ctx: Context<CreateRegistrar>, registrar_bump: u8) -> Result<()> {
|
||||
let registrar = &mut ctx.accounts.registrar.load_init()?;
|
||||
require_eq!(registrar_bump, *ctx.bumps.get("registrar").unwrap());
|
||||
registrar.bump = registrar_bump;
|
||||
registrar.governance_program_id = ctx.accounts.governance_program_id.key();
|
||||
registrar.realm = ctx.accounts.realm.key();
|
||||
|
@ -63,9 +63,10 @@ pub fn create_registrar(ctx: Context<CreateRegistrar>, registrar_bump: u8) -> Re
|
|||
&ctx.accounts.realm.to_account_info(),
|
||||
®istrar.realm_governing_token_mint,
|
||||
)?;
|
||||
require!(
|
||||
realm.authority.unwrap() == ctx.accounts.realm_authority.key(),
|
||||
ErrorCode::InvalidRealmAuthority
|
||||
require_keys_eq!(
|
||||
realm.authority.unwrap(),
|
||||
ctx.accounts.realm_authority.key(),
|
||||
VsrError::InvalidRealmAuthority
|
||||
);
|
||||
|
||||
Ok(())
|
||||
|
|
|
@ -5,14 +5,13 @@ use anchor_lang::solana_program::sysvar::instructions as tx_instructions;
|
|||
use std::mem::size_of;
|
||||
|
||||
#[derive(Accounts)]
|
||||
#[instruction(voter_bump: u8, voter_weight_record_bump: u8)]
|
||||
pub struct CreateVoter<'info> {
|
||||
pub registrar: AccountLoader<'info, Registrar>,
|
||||
|
||||
#[account(
|
||||
init,
|
||||
seeds = [registrar.key().as_ref(), b"voter".as_ref(), voter_authority.key().as_ref()],
|
||||
bump = voter_bump,
|
||||
bump,
|
||||
payer = payer,
|
||||
space = 8 + size_of::<Voter>(),
|
||||
)]
|
||||
|
@ -28,7 +27,7 @@ pub struct CreateVoter<'info> {
|
|||
#[account(
|
||||
init,
|
||||
seeds = [registrar.key().as_ref(), b"voter-weight-record".as_ref(), voter_authority.key().as_ref()],
|
||||
bump = voter_weight_record_bump,
|
||||
bump,
|
||||
payer = payer,
|
||||
space = size_of::<VoterWeightRecord>(),
|
||||
)]
|
||||
|
@ -61,12 +60,19 @@ pub fn create_voter(
|
|||
let ixns = ctx.accounts.instructions.to_account_info();
|
||||
let current_index = tx_instructions::load_current_index_checked(&ixns)? as usize;
|
||||
let current_ixn = tx_instructions::load_instruction_at_checked(current_index, &ixns)?;
|
||||
require!(
|
||||
current_ixn.program_id == *ctx.program_id,
|
||||
ErrorCode::ForbiddenCpi
|
||||
require_keys_eq!(
|
||||
current_ixn.program_id,
|
||||
*ctx.program_id,
|
||||
VsrError::ForbiddenCpi
|
||||
);
|
||||
}
|
||||
|
||||
require_eq!(voter_bump, *ctx.bumps.get("voter").unwrap());
|
||||
require_eq!(
|
||||
voter_weight_record_bump,
|
||||
*ctx.bumps.get("voter_weight_record").unwrap()
|
||||
);
|
||||
|
||||
// Load accounts.
|
||||
let registrar = &ctx.accounts.registrar.load()?;
|
||||
let voter_authority = ctx.accounts.voter_authority.key();
|
||||
|
|
|
@ -73,9 +73,10 @@ pub fn deposit(ctx: Context<Deposit>, deposit_entry_index: u8, amount: u64) -> R
|
|||
|
||||
// Get the exchange rate entry associated with this deposit.
|
||||
let mint_idx = registrar.voting_mint_config_index(ctx.accounts.deposit_token.mint)?;
|
||||
require!(
|
||||
mint_idx == d_entry.voting_mint_config_idx as usize,
|
||||
InvalidMint
|
||||
require_eq!(
|
||||
mint_idx,
|
||||
d_entry.voting_mint_config_idx as usize,
|
||||
VsrError::InvalidMint
|
||||
);
|
||||
|
||||
// Adding funds to a lockup that is already in progress can be complicated
|
||||
|
|
|
@ -7,22 +7,13 @@ use std::convert::TryFrom;
|
|||
use std::mem::size_of;
|
||||
|
||||
#[derive(Accounts)]
|
||||
#[instruction(
|
||||
voter_bump: u8,
|
||||
voter_weight_record_bump: u8,
|
||||
kind: LockupKind,
|
||||
start_ts: Option<u64>,
|
||||
periods: u32,
|
||||
allow_clawback: bool,
|
||||
amount: u64,
|
||||
)]
|
||||
pub struct Grant<'info> {
|
||||
pub registrar: AccountLoader<'info, Registrar>,
|
||||
|
||||
#[account(
|
||||
init_if_needed,
|
||||
seeds = [registrar.key().as_ref(), b"voter".as_ref(), voter_authority.key().as_ref()],
|
||||
bump = voter_bump,
|
||||
bump,
|
||||
payer = payer,
|
||||
space = 8 + size_of::<Voter>(),
|
||||
)]
|
||||
|
@ -37,7 +28,7 @@ pub struct Grant<'info> {
|
|||
#[account(
|
||||
init_if_needed,
|
||||
seeds = [registrar.key().as_ref(), b"voter-weight-record".as_ref(), voter_authority.key().as_ref()],
|
||||
bump = voter_weight_record_bump,
|
||||
bump,
|
||||
payer = payer,
|
||||
space = size_of::<VoterWeightRecord>(),
|
||||
)]
|
||||
|
@ -114,6 +105,12 @@ pub fn grant(
|
|||
allow_clawback: bool,
|
||||
amount: u64,
|
||||
) -> Result<()> {
|
||||
require_eq!(voter_bump, *ctx.bumps.get("voter").unwrap());
|
||||
require_eq!(
|
||||
voter_weight_record_bump,
|
||||
*ctx.bumps.get("voter_weight_record").unwrap()
|
||||
);
|
||||
|
||||
// Load accounts.
|
||||
let registrar = &ctx.accounts.registrar.load()?;
|
||||
let voter_authority = ctx.accounts.voter_authority.key();
|
||||
|
@ -130,7 +127,7 @@ pub fn grant(
|
|||
grant_authority == registrar.realm_authority
|
||||
|| grant_authority == mint_config.grant_authority
|
||||
|| grant_authority == voter_authority,
|
||||
InvalidAuthority
|
||||
VsrError::InvalidAuthority
|
||||
);
|
||||
|
||||
// Init the voter if it hasn't been already.
|
||||
|
@ -162,7 +159,7 @@ pub fn grant(
|
|||
.deposits
|
||||
.iter()
|
||||
.position(|d_entry| !d_entry.is_used)
|
||||
.ok_or(ErrorCode::DepositEntryFull)?;
|
||||
.ok_or(VsrError::DepositEntryFull)?;
|
||||
let d_entry = &mut voter.deposits[free_entry_idx];
|
||||
|
||||
let curr_ts = registrar.clock_unix_timestamp();
|
||||
|
|
|
@ -49,12 +49,16 @@ pub fn internal_transfer_locked(
|
|||
|
||||
// Allowing transfers from clawback-enabled deposits could be used to avoid
|
||||
// clawback by making proposal instructions target the wrong entry index.
|
||||
require!(!source.allow_clawback, InvalidChangeToClawbackDepositEntry);
|
||||
require!(
|
||||
!source.allow_clawback,
|
||||
VsrError::InvalidChangeToClawbackDepositEntry
|
||||
);
|
||||
|
||||
// Reduce source amounts
|
||||
require!(
|
||||
amount <= source.amount_initially_locked_native,
|
||||
InsufficientLockedTokens
|
||||
require_gte!(
|
||||
source.amount_initially_locked_native,
|
||||
amount,
|
||||
VsrError::InsufficientLockedTokens
|
||||
);
|
||||
source.amount_deposited_native = source.amount_deposited_native.checked_sub(amount).unwrap();
|
||||
source.amount_initially_locked_native =
|
||||
|
@ -63,17 +67,20 @@ pub fn internal_transfer_locked(
|
|||
// Check target compatibility
|
||||
let target = voter.active_deposit_mut(target_deposit_entry_index)?;
|
||||
target.resolve_vesting(curr_ts)?;
|
||||
require!(
|
||||
target.voting_mint_config_idx == source_mint_idx,
|
||||
InvalidMint
|
||||
require_eq!(
|
||||
target.voting_mint_config_idx,
|
||||
source_mint_idx,
|
||||
VsrError::InvalidMint
|
||||
);
|
||||
require!(
|
||||
target.lockup.seconds_left(curr_ts) >= source_seconds_left,
|
||||
InvalidLockupPeriod
|
||||
require_gte!(
|
||||
target.lockup.seconds_left(curr_ts),
|
||||
source_seconds_left,
|
||||
VsrError::InvalidLockupPeriod
|
||||
);
|
||||
require!(
|
||||
target.lockup.kind.strictness() >= source_strictness,
|
||||
InvalidLockupKind
|
||||
require_gte!(
|
||||
target.lockup.kind.strictness(),
|
||||
source_strictness,
|
||||
VsrError::InvalidLockupKind
|
||||
);
|
||||
|
||||
// Add target amounts
|
||||
|
|
|
@ -39,17 +39,19 @@ pub fn internal_transfer_unlocked(
|
|||
let source_mint_idx = source.voting_mint_config_idx;
|
||||
|
||||
// Reduce source amounts
|
||||
require!(
|
||||
amount <= source.amount_unlocked(curr_ts),
|
||||
InsufficientUnlockedTokens
|
||||
require_gte!(
|
||||
source.amount_unlocked(curr_ts),
|
||||
amount,
|
||||
VsrError::InsufficientUnlockedTokens
|
||||
);
|
||||
source.amount_deposited_native = source.amount_deposited_native.checked_sub(amount).unwrap();
|
||||
|
||||
// Check target compatibility
|
||||
let target = voter.active_deposit_mut(target_deposit_entry_index)?;
|
||||
require!(
|
||||
target.voting_mint_config_idx == source_mint_idx,
|
||||
InvalidMint
|
||||
require_eq!(
|
||||
target.voting_mint_config_idx,
|
||||
source_mint_idx,
|
||||
VsrError::InvalidMint
|
||||
);
|
||||
|
||||
// Add target amounts
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
use crate::error::*;
|
||||
use crate::events::*;
|
||||
use crate::state::*;
|
||||
use anchor_lang::prelude::*;
|
||||
|
|
|
@ -34,18 +34,22 @@ pub fn reset_lockup(
|
|||
let source = voter.active_deposit_mut(deposit_entry_index)?;
|
||||
|
||||
// Must not decrease duration or strictness
|
||||
require!(
|
||||
(periods as u64).checked_mul(kind.period_secs()).unwrap()
|
||||
>= source.lockup.seconds_left(curr_ts),
|
||||
InvalidLockupPeriod
|
||||
require_gte!(
|
||||
(periods as u64).checked_mul(kind.period_secs()).unwrap(),
|
||||
source.lockup.seconds_left(curr_ts),
|
||||
VsrError::InvalidLockupPeriod
|
||||
);
|
||||
require!(
|
||||
kind.strictness() >= source.lockup.kind.strictness(),
|
||||
InvalidLockupKind
|
||||
require_gte!(
|
||||
kind.strictness(),
|
||||
source.lockup.kind.strictness(),
|
||||
VsrError::InvalidLockupKind
|
||||
);
|
||||
|
||||
// Don't re-lock clawback deposits. Users must withdraw and create a new one.
|
||||
require!(!source.allow_clawback, InvalidChangeToClawbackDepositEntry);
|
||||
require!(
|
||||
!source.allow_clawback,
|
||||
VsrError::InvalidChangeToClawbackDepositEntry
|
||||
);
|
||||
|
||||
// Change the deposit entry.
|
||||
let d_entry = voter.active_deposit_mut(deposit_entry_index)?;
|
||||
|
|
|
@ -15,9 +15,10 @@ pub struct SetTimeOffset<'info> {
|
|||
pub fn set_time_offset(ctx: Context<SetTimeOffset>, time_offset: i64) -> Result<()> {
|
||||
let allowed_program = Pubkey::from_str("GovernanceProgramTest1111111111111111111111").unwrap();
|
||||
let registrar = &mut ctx.accounts.registrar.load_mut()?;
|
||||
require!(
|
||||
registrar.governance_program_id == allowed_program,
|
||||
ErrorCode::DebugInstruction
|
||||
require_keys_eq!(
|
||||
registrar.governance_program_id,
|
||||
allowed_program,
|
||||
VsrError::DebugInstruction
|
||||
);
|
||||
registrar.time_offset = time_offset;
|
||||
Ok(())
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
use crate::error::*;
|
||||
use crate::state::*;
|
||||
use anchor_lang::prelude::*;
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
use crate::error::*;
|
||||
use crate::state::*;
|
||||
use anchor_lang::prelude::*;
|
||||
|
||||
|
|
|
@ -103,19 +103,22 @@ pub fn withdraw(ctx: Context<Withdraw>, deposit_entry_index: u8, amount: u64) ->
|
|||
// Get the deposit being withdrawn from.
|
||||
let curr_ts = registrar.clock_unix_timestamp();
|
||||
let deposit_entry = voter.active_deposit_mut(deposit_entry_index)?;
|
||||
require!(
|
||||
deposit_entry.amount_unlocked(curr_ts) >= amount,
|
||||
InsufficientUnlockedTokens
|
||||
require_gte!(
|
||||
deposit_entry.amount_unlocked(curr_ts),
|
||||
amount,
|
||||
VsrError::InsufficientUnlockedTokens
|
||||
);
|
||||
require!(
|
||||
mint_idx == deposit_entry.voting_mint_config_idx as usize,
|
||||
ErrorCode::InvalidMint
|
||||
require_eq!(
|
||||
mint_idx,
|
||||
deposit_entry.voting_mint_config_idx as usize,
|
||||
VsrError::InvalidMint
|
||||
);
|
||||
|
||||
// Bookkeeping for withdrawn funds.
|
||||
require!(
|
||||
amount <= deposit_entry.amount_deposited_native,
|
||||
InternalProgramError
|
||||
require_gte!(
|
||||
deposit_entry.amount_deposited_native,
|
||||
amount,
|
||||
VsrError::InternalProgramError
|
||||
);
|
||||
deposit_entry.amount_deposited_native = deposit_entry
|
||||
.amount_deposited_native
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
use anchor_lang::prelude::*;
|
||||
use error::*;
|
||||
use instructions::*;
|
||||
use state::*;
|
||||
|
||||
|
|
|
@ -93,13 +93,14 @@ impl DepositEntry {
|
|||
max_locked_vote_weight,
|
||||
voting_mint_config.lockup_saturation_secs,
|
||||
)?;
|
||||
require!(
|
||||
locked_vote_weight <= max_locked_vote_weight,
|
||||
InternalErrorBadLockupVoteWeight
|
||||
require_gte!(
|
||||
max_locked_vote_weight,
|
||||
locked_vote_weight,
|
||||
VsrError::InternalErrorBadLockupVoteWeight
|
||||
);
|
||||
baseline_vote_weight
|
||||
.checked_add(locked_vote_weight)
|
||||
.ok_or(Error::ErrorCode(ErrorCode::VoterWeightOverflow))
|
||||
.ok_or_else(|| error!(VsrError::VoterWeightOverflow))
|
||||
}
|
||||
|
||||
/// Vote power contribution from locked funds only.
|
||||
|
@ -133,6 +134,34 @@ impl DepositEntry {
|
|||
}
|
||||
}
|
||||
|
||||
/// Vote power contribution from locked funds only at `at_ts`, assuming the user does everything
|
||||
/// they can to unlock as quickly as possible at `curr_ts`.
|
||||
///
|
||||
/// Currently that means that Constant lockups get turned into Cliff lockups.
|
||||
pub fn voting_power_locked_guaranteed(
|
||||
&self,
|
||||
curr_ts: i64,
|
||||
at_ts: i64,
|
||||
max_locked_vote_weight: u64,
|
||||
lockup_saturation_secs: u64,
|
||||
) -> Result<u64> {
|
||||
let mut altered = self.clone();
|
||||
|
||||
// Trigger the unlock phase for constant lockups
|
||||
if self.lockup.kind == LockupKind::Constant {
|
||||
altered.lockup.kind = LockupKind::Cliff;
|
||||
altered.lockup.start_ts = curr_ts;
|
||||
altered.lockup.end_ts = curr_ts
|
||||
.checked_add(i64::try_from(self.lockup.seconds_left(curr_ts)).unwrap())
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
// Other lockup types don't need changes, because the user
|
||||
// cannot reduce their lockup strength.
|
||||
|
||||
altered.voting_power_locked(at_ts, max_locked_vote_weight, lockup_saturation_secs)
|
||||
}
|
||||
|
||||
/// Vote power contribution from funds with linear vesting.
|
||||
fn voting_power_cliff(
|
||||
&self,
|
||||
|
@ -334,16 +363,17 @@ impl DepositEntry {
|
|||
/// periods_total() = 1
|
||||
pub fn resolve_vesting(&mut self, curr_ts: i64) -> Result<()> {
|
||||
let vested_amount = self.vested(curr_ts)?;
|
||||
require!(
|
||||
vested_amount <= self.amount_initially_locked_native,
|
||||
InternalProgramError
|
||||
require_gte!(
|
||||
self.amount_initially_locked_native,
|
||||
vested_amount,
|
||||
VsrError::InternalProgramError
|
||||
);
|
||||
self.amount_initially_locked_native = self
|
||||
.amount_initially_locked_native
|
||||
.checked_sub(vested_amount)
|
||||
.unwrap();
|
||||
self.lockup.remove_past_periods(curr_ts)?;
|
||||
require!(self.vested(curr_ts)? == 0, InternalProgramError);
|
||||
require_eq!(self.vested(curr_ts)?, 0, VsrError::InternalProgramError);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
@ -351,7 +381,7 @@ impl DepositEntry {
|
|||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::LockupKind::Daily;
|
||||
use crate::LockupKind::{Constant, Daily};
|
||||
|
||||
#[test]
|
||||
pub fn resolve_vesting() -> Result<()> {
|
||||
|
@ -489,4 +519,53 @@ mod tests {
|
|||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
pub fn guaranteed_lockup_test() -> Result<()> {
|
||||
// Check that constant lockups are handled correctly.
|
||||
let day: i64 = 86_400;
|
||||
let saturation = (10 * day) as u64;
|
||||
let start = 10_000_000_000; // arbitrary point
|
||||
let deposit = DepositEntry {
|
||||
amount_deposited_native: 10_000,
|
||||
amount_initially_locked_native: 10_000,
|
||||
lockup: Lockup {
|
||||
start_ts: start,
|
||||
end_ts: start + 5 * day,
|
||||
kind: Constant,
|
||||
reserved: [0; 15],
|
||||
},
|
||||
is_used: true,
|
||||
allow_clawback: false,
|
||||
voting_mint_config_idx: 0,
|
||||
reserved: [0; 29],
|
||||
};
|
||||
|
||||
let v = |curr_offset, at_offset| {
|
||||
deposit
|
||||
.voting_power_locked_guaranteed(
|
||||
start + curr_offset,
|
||||
start + at_offset,
|
||||
100,
|
||||
saturation,
|
||||
)
|
||||
.unwrap()
|
||||
};
|
||||
|
||||
assert_eq!(v(0, 0), 50);
|
||||
assert_eq!(v(-day, 0), 40);
|
||||
assert_eq!(v(-100 * day, 0), 0);
|
||||
assert_eq!(v(-100 * day, -98 * day), 30);
|
||||
assert_eq!(v(0, day), 40);
|
||||
assert_eq!(v(0, 5 * day), 0);
|
||||
assert_eq!(v(0, 50 * day), 0);
|
||||
assert_eq!(v(day, day), 50);
|
||||
assert_eq!(v(day, 2 * day,), 40);
|
||||
assert_eq!(v(day, 20 * day), 0);
|
||||
assert_eq!(v(50 * day, 50 * day), 50);
|
||||
assert_eq!(v(50 * day, 51 * day), 40);
|
||||
assert_eq!(v(50 * day, 80 * day), 0);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,8 +21,8 @@ pub const SECS_PER_MONTH: u64 = 365 * SECS_PER_DAY / 12;
|
|||
/// that would be 36500^2 * SECS_PER_MONTH << 2^64.
|
||||
///
|
||||
/// This setting limits the maximum lockup duration for lockup methods
|
||||
/// with daily periods to 100 years.
|
||||
pub const MAX_LOCKUP_PERIODS: u32 = 365 * 100;
|
||||
/// with daily periods to 200 years.
|
||||
pub const MAX_LOCKUP_PERIODS: u32 = 365 * 200;
|
||||
|
||||
pub const MAX_LOCKUP_IN_FUTURE_SECS: i64 = 100 * 365 * 24 * 60 * 60;
|
||||
|
||||
|
@ -68,11 +68,12 @@ impl Lockup {
|
|||
start_ts: i64,
|
||||
periods: u32,
|
||||
) -> Result<Self> {
|
||||
require!(
|
||||
start_ts < curr_ts + MAX_LOCKUP_IN_FUTURE_SECS,
|
||||
DepositStartTooFarInFuture
|
||||
require_gt!(
|
||||
curr_ts + MAX_LOCKUP_IN_FUTURE_SECS,
|
||||
start_ts,
|
||||
VsrError::DepositStartTooFarInFuture
|
||||
);
|
||||
require!(periods <= MAX_LOCKUP_PERIODS, InvalidLockupPeriod);
|
||||
require_gte!(MAX_LOCKUP_PERIODS, periods, VsrError::InvalidLockupPeriod);
|
||||
Ok(Self {
|
||||
kind,
|
||||
start_ts,
|
||||
|
@ -138,7 +139,7 @@ impl Lockup {
|
|||
}
|
||||
|
||||
let lockup_secs = self.seconds_left(self.start_ts);
|
||||
require!(lockup_secs % period_secs == 0, InvalidLockupPeriod);
|
||||
require_eq!(lockup_secs % period_secs, 0, VsrError::InvalidLockupPeriod);
|
||||
|
||||
Ok(lockup_secs.checked_div(period_secs).unwrap())
|
||||
}
|
||||
|
@ -151,8 +152,12 @@ impl Lockup {
|
|||
.start_ts
|
||||
.checked_add(i64::try_from(periods.checked_mul(period_secs).unwrap()).unwrap())
|
||||
.unwrap();
|
||||
require!(self.start_ts <= self.end_ts, InternalProgramError);
|
||||
require!(self.period_current(curr_ts)? == 0, InternalProgramError);
|
||||
require_gte!(self.end_ts, self.start_ts, VsrError::InternalProgramError);
|
||||
require_eq!(
|
||||
self.period_current(curr_ts)?,
|
||||
0,
|
||||
VsrError::InternalProgramError
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ impl Registrar {
|
|||
self.voting_mints
|
||||
.iter()
|
||||
.position(|r| r.mint == mint)
|
||||
.ok_or(Error::ErrorCode(ErrorCode::VotingMintNotFound))
|
||||
.ok_or_else(|| error!(VsrError::VotingMintNotFound))
|
||||
}
|
||||
|
||||
pub fn max_vote_weight(&self, mint_accounts: &[AccountInfo]) -> Result<u64> {
|
||||
|
@ -52,14 +52,14 @@ impl Registrar {
|
|||
let mint_account = mint_accounts
|
||||
.iter()
|
||||
.find(|a| a.key() == voting_mint_config.mint)
|
||||
.ok_or(Error::ErrorCode(ErrorCode::VotingMintNotFound))?;
|
||||
.ok_or_else(|| error!(VsrError::VotingMintNotFound))?;
|
||||
let mint = Account::<Mint>::try_from(mint_account)?;
|
||||
sum = sum
|
||||
.checked_add(voting_mint_config.baseline_vote_weight(mint.supply)?)
|
||||
.ok_or(Error::ErrorCode(ErrorCode::VoterWeightOverflow))?;
|
||||
.ok_or_else(|| error!(VsrError::VoterWeightOverflow))?;
|
||||
sum = sum
|
||||
.checked_add(voting_mint_config.max_extra_lockup_vote_weight(mint.supply)?)
|
||||
.ok_or(Error::ErrorCode(ErrorCode::VoterWeightOverflow))?;
|
||||
.ok_or_else(|| error!(VsrError::VoterWeightOverflow))?;
|
||||
Ok(sum)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -45,11 +45,41 @@ impl Voter {
|
|||
})
|
||||
}
|
||||
|
||||
/// The extra lockup vote weight that the user is guaranteed to have at `at_ts`, assuming
|
||||
/// they withdraw and unlock as much as possible starting from `curr_ts`.
|
||||
pub fn weight_locked_guaranteed(
|
||||
&self,
|
||||
registrar: &Registrar,
|
||||
curr_ts: i64,
|
||||
at_ts: i64,
|
||||
) -> Result<u64> {
|
||||
require_gte!(at_ts, curr_ts, VsrError::InvalidTimestampArguments);
|
||||
self.deposits
|
||||
.iter()
|
||||
.filter(|d| d.is_used)
|
||||
.try_fold(0u64, |sum, d| {
|
||||
let mint_config = ®istrar.voting_mints[d.voting_mint_config_idx as usize];
|
||||
let max_locked_vote_weight =
|
||||
mint_config.max_extra_lockup_vote_weight(d.amount_initially_locked_native)?;
|
||||
let amount = d.voting_power_locked_guaranteed(
|
||||
curr_ts,
|
||||
at_ts,
|
||||
max_locked_vote_weight,
|
||||
mint_config.lockup_saturation_secs,
|
||||
)?;
|
||||
Ok(sum.checked_add(amount).unwrap())
|
||||
})
|
||||
}
|
||||
|
||||
pub fn active_deposit_mut(&mut self, index: u8) -> Result<&mut DepositEntry> {
|
||||
let index = index as usize;
|
||||
require!(index < self.deposits.len(), OutOfBoundsDepositEntryIndex);
|
||||
require_gt!(
|
||||
self.deposits.len(),
|
||||
index,
|
||||
VsrError::OutOfBoundsDepositEntryIndex
|
||||
);
|
||||
let d = &mut self.deposits[index];
|
||||
require!(d.is_used, UnusedDepositEntryIndex);
|
||||
require!(d.is_used, VsrError::UnusedDepositEntryIndex);
|
||||
Ok(d)
|
||||
}
|
||||
|
||||
|
@ -64,9 +94,10 @@ impl Voter {
|
|||
®istrar.realm,
|
||||
®istrar.realm_governing_token_mint,
|
||||
)?;
|
||||
require!(
|
||||
record.governing_token_owner == self.voter_authority,
|
||||
InvalidTokenOwnerRecord
|
||||
require_keys_eq!(
|
||||
record.governing_token_owner,
|
||||
self.voter_authority,
|
||||
VsrError::InvalidTokenOwnerRecord
|
||||
);
|
||||
Ok(record)
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ impl VotingMintConfig {
|
|||
};
|
||||
u64::try_from(val).ok()
|
||||
};
|
||||
compute().ok_or(Error::ErrorCode(ErrorCode::VoterWeightOverflow))
|
||||
compute().ok_or_else(|| error!(VsrError::VoterWeightOverflow))
|
||||
}
|
||||
|
||||
/// Apply a factor in SCALED_FACTOR_BASE units.
|
||||
|
@ -71,7 +71,7 @@ impl VotingMintConfig {
|
|||
)
|
||||
.ok()
|
||||
};
|
||||
compute().ok_or(Error::ErrorCode(ErrorCode::VoterWeightOverflow))
|
||||
compute().ok_or_else(|| error!(VsrError::VoterWeightOverflow))
|
||||
}
|
||||
|
||||
/// The vote weight a deposit of a number of native tokens should have.
|
||||
|
|
|
@ -46,9 +46,14 @@ impl AddPacked for ProgramTest {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Default, Clone)]
|
||||
pub struct ProgramOutput {
|
||||
pub logs: Vec<String>,
|
||||
pub data: Vec<String>,
|
||||
}
|
||||
struct LoggerWrapper {
|
||||
inner: env_logger::Logger,
|
||||
program_log: Arc<RwLock<Vec<String>>>,
|
||||
output: Arc<RwLock<ProgramOutput>>,
|
||||
}
|
||||
|
||||
impl Log for LoggerWrapper {
|
||||
|
@ -63,7 +68,9 @@ impl Log for LoggerWrapper {
|
|||
{
|
||||
let msg = record.args().to_string();
|
||||
if let Some(data) = msg.strip_prefix("Program log: ") {
|
||||
self.program_log.write().unwrap().push(data.into());
|
||||
self.output.write().unwrap().logs.push(data.into());
|
||||
} else if let Some(data) = msg.strip_prefix("Program data: ") {
|
||||
self.output.write().unwrap().data.push(data.into());
|
||||
}
|
||||
}
|
||||
self.inner.log(record);
|
||||
|
@ -92,10 +99,10 @@ impl TestContext {
|
|||
env_logger::Builder::from_env(env_logger::Env::new().default_filter_or(log_filter))
|
||||
.format_timestamp_nanos()
|
||||
.build();
|
||||
let program_log_capture = Arc::new(RwLock::new(vec![]));
|
||||
let program_output = Arc::new(RwLock::new(ProgramOutput::default()));
|
||||
let _ = log::set_boxed_logger(Box::new(LoggerWrapper {
|
||||
inner: env_logger,
|
||||
program_log: program_log_capture.clone(),
|
||||
output: program_output.clone(),
|
||||
}));
|
||||
|
||||
let addin_program_id = voter_stake_registry::id();
|
||||
|
@ -209,7 +216,7 @@ impl TestContext {
|
|||
let solana = Arc::new(SolanaCookie {
|
||||
context: RefCell::new(context),
|
||||
rent,
|
||||
program_log: program_log_capture.clone(),
|
||||
program_output: program_output.clone(),
|
||||
});
|
||||
|
||||
TestContext {
|
||||
|
|
|
@ -18,7 +18,7 @@ use spl_token::*;
|
|||
pub struct SolanaCookie {
|
||||
pub context: RefCell<ProgramTestContext>,
|
||||
pub rent: Rent,
|
||||
pub program_log: Arc<RwLock<Vec<String>>>,
|
||||
pub program_output: Arc<RwLock<super::ProgramOutput>>,
|
||||
}
|
||||
|
||||
impl SolanaCookie {
|
||||
|
@ -28,7 +28,7 @@ impl SolanaCookie {
|
|||
instructions: &[Instruction],
|
||||
signers: Option<&[&Keypair]>,
|
||||
) -> Result<(), TransportError> {
|
||||
self.program_log.write().unwrap().clear();
|
||||
*self.program_output.write().unwrap() = super::ProgramOutput::default();
|
||||
|
||||
let mut context = self.context.borrow_mut();
|
||||
|
||||
|
@ -127,7 +127,7 @@ impl SolanaCookie {
|
|||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn program_log(&self) -> Vec<String> {
|
||||
self.program_log.read().unwrap().clone()
|
||||
pub fn program_output(&self) -> super::ProgramOutput {
|
||||
self.program_output.read().unwrap().clone()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,34 +18,12 @@ fn deserialize_event<T: anchor_lang::Event>(event: &str) -> Option<T> {
|
|||
#[tokio::test]
|
||||
async fn test_print_event() -> Result<(), TransportError> {
|
||||
println!(
|
||||
"{:?}",
|
||||
"{:#?}",
|
||||
deserialize_event::<voter_stake_registry::events::DepositEntryInfo>(
|
||||
"LP4gbyknBZQAABhzAQAAAAAAGHMBAAAAAAAYcwEAAAAAAAEAAAAAAAAAAAGK6hx3fgEAAAA="
|
||||
)
|
||||
.ok_or(())
|
||||
);
|
||||
println!(
|
||||
"{:?}",
|
||||
deserialize_event::<voter_stake_registry::events::DepositEntryInfo>(
|
||||
"LP4gbyknBZQBAAAAAAAAAAAAoIYBAAAAAABQwwAAAAAAAAFQwwAAAAAAAAFSl5iAfgEAAAA="
|
||||
)
|
||||
.ok_or(())
|
||||
);
|
||||
println!(
|
||||
"{:?}",
|
||||
deserialize_event::<voter_stake_registry::events::DepositEntryInfo>(
|
||||
"LP4gbyknBZQCAAAAAAAAAAAARjI0BgAAAAAQJwAAAAAAAAEQJwAAAAAAAAGLPXx3fgEAAAEQJwAAAAAAAIs9fHd+AQAA"
|
||||
)
|
||||
.ok_or(())
|
||||
);
|
||||
println!(
|
||||
"{:?}",
|
||||
deserialize_event::<voter_stake_registry::events::DepositEntryInfo>(
|
||||
"LP4gbyknBZQDAAAAAAAAAAAACFIAAAAAAACYOgAAAAAAAAGYOgAAAAAAAAAA"
|
||||
)
|
||||
.ok_or(())
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -131,12 +109,11 @@ async fn test_log_voter_info() -> Result<(), TransportError> {
|
|||
context.solana.advance_clock_by_slots(2).await;
|
||||
|
||||
addin.log_voter_info(®istrar, &voter, 0).await;
|
||||
let log = context.solana.program_log();
|
||||
assert_eq!(log[1], "voter");
|
||||
assert_eq!(log[3], "deposit_entries");
|
||||
let data_log = context.solana.program_output().data;
|
||||
assert_eq!(data_log.len(), 2);
|
||||
|
||||
let voter_event =
|
||||
deserialize_event::<voter_stake_registry::events::VoterInfo>(&log[2]).unwrap();
|
||||
deserialize_event::<voter_stake_registry::events::VoterInfo>(&data_log[0]).unwrap();
|
||||
assert_eq!(voter_event.voting_power_baseline, 12000);
|
||||
assert_eq!(
|
||||
voter_event.voting_power,
|
||||
|
@ -144,7 +121,7 @@ async fn test_log_voter_info() -> Result<(), TransportError> {
|
|||
);
|
||||
|
||||
let deposit_event =
|
||||
deserialize_event::<voter_stake_registry::events::DepositEntryInfo>(&log[4]).unwrap();
|
||||
deserialize_event::<voter_stake_registry::events::DepositEntryInfo>(&data_log[1]).unwrap();
|
||||
assert_eq!(deposit_event.deposit_entry_index, 0);
|
||||
assert_eq!(deposit_event.voting_mint_config_index, 0);
|
||||
assert_eq!(deposit_event.unlocked, 1000);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
export type VoterStakeRegistry = {
|
||||
"version": "0.2.0",
|
||||
"version": "0.2.1",
|
||||
"name": "voter_stake_registry",
|
||||
"instructions": [
|
||||
{
|
||||
|
@ -1280,12 +1280,17 @@ export type VoterStakeRegistry = {
|
|||
"code": 6036,
|
||||
"name": "VaultTokenNonZero",
|
||||
"msg": ""
|
||||
},
|
||||
{
|
||||
"code": 6037,
|
||||
"name": "InvalidTimestampArguments",
|
||||
"msg": ""
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
export const IDL: VoterStakeRegistry = {
|
||||
"version": "0.2.0",
|
||||
"version": "0.2.1",
|
||||
"name": "voter_stake_registry",
|
||||
"instructions": [
|
||||
{
|
||||
|
@ -2566,6 +2571,11 @@ export const IDL: VoterStakeRegistry = {
|
|||
"code": 6036,
|
||||
"name": "VaultTokenNonZero",
|
||||
"msg": ""
|
||||
},
|
||||
{
|
||||
"code": 6037,
|
||||
"name": "InvalidTimestampArguments",
|
||||
"msg": ""
|
||||
}
|
||||
]
|
||||
};
|
||||
|
|
359
yarn.lock
359
yarn.lock
|
@ -15,18 +15,18 @@
|
|||
integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==
|
||||
|
||||
"@babel/highlight@^7.10.4":
|
||||
version "7.16.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.7.tgz#81a01d7d675046f0d96f82450d9d9578bdfd6b0b"
|
||||
integrity sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==
|
||||
version "7.17.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.9.tgz#61b2ee7f32ea0454612def4fccdae0de232b73e3"
|
||||
integrity sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==
|
||||
dependencies:
|
||||
"@babel/helper-validator-identifier" "^7.16.7"
|
||||
chalk "^2.0.0"
|
||||
js-tokens "^4.0.0"
|
||||
|
||||
"@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5":
|
||||
version "7.16.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa"
|
||||
integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==
|
||||
"@babel/runtime@^7.10.5", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2":
|
||||
version "7.17.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72"
|
||||
integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==
|
||||
dependencies:
|
||||
regenerator-runtime "^0.13.4"
|
||||
|
||||
|
@ -45,25 +45,25 @@
|
|||
minimatch "^3.0.4"
|
||||
strip-json-comments "^3.1.1"
|
||||
|
||||
"@ethersproject/bytes@^5.5.0":
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c"
|
||||
integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==
|
||||
"@ethersproject/bytes@^5.6.0":
|
||||
version "5.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7"
|
||||
integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==
|
||||
dependencies:
|
||||
"@ethersproject/logger" "^5.5.0"
|
||||
"@ethersproject/logger" "^5.6.0"
|
||||
|
||||
"@ethersproject/logger@^5.5.0":
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d"
|
||||
integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==
|
||||
"@ethersproject/logger@^5.6.0":
|
||||
version "5.6.0"
|
||||
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a"
|
||||
integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==
|
||||
|
||||
"@ethersproject/sha2@^5.5.0":
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7"
|
||||
integrity sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==
|
||||
version "5.6.0"
|
||||
resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.0.tgz#364c4c11cc753bda36f31f001628706ebadb64d9"
|
||||
integrity sha512-1tNWCPFLu1n3JM9t4/kytz35DkuF9MxqkGGEHNauEbaARdm2fafnOyw1s0tIQDPKF/7bkP1u3dbrmjpn5CelyA==
|
||||
dependencies:
|
||||
"@ethersproject/bytes" "^5.5.0"
|
||||
"@ethersproject/logger" "^5.5.0"
|
||||
"@ethersproject/bytes" "^5.6.0"
|
||||
"@ethersproject/logger" "^5.6.0"
|
||||
hash.js "1.1.7"
|
||||
|
||||
"@humanwhocodes/config-array@^0.5.0":
|
||||
|
@ -121,38 +121,38 @@
|
|||
snake-case "^3.0.4"
|
||||
toml "^3.0.0"
|
||||
|
||||
"@project-serum/anchor@^0.18.0":
|
||||
version "0.18.2"
|
||||
resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.18.2.tgz#0f13b5c2046446b7c24cf28763eec90febb28485"
|
||||
integrity sha512-uyjiN/3Ipp+4hrZRm/hG18HzGLZyvP790LXrCsGO3IWxSl28YRhiGEpKnZycfMW94R7nxdUoE3wY67V+ZHSQBQ==
|
||||
"@project-serum/anchor@^0.24.2":
|
||||
version "0.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.24.2.tgz#a3c52a99605c80735f446ca9b3a4885034731004"
|
||||
integrity sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA==
|
||||
dependencies:
|
||||
"@project-serum/borsh" "^0.2.2"
|
||||
"@solana/web3.js" "^1.17.0"
|
||||
"@project-serum/borsh" "^0.2.5"
|
||||
"@solana/web3.js" "^1.36.0"
|
||||
base64-js "^1.5.1"
|
||||
bn.js "^5.1.2"
|
||||
bs58 "^4.0.1"
|
||||
buffer-layout "^1.2.0"
|
||||
buffer-layout "^1.2.2"
|
||||
camelcase "^5.3.1"
|
||||
cross-fetch "^3.1.5"
|
||||
crypto-hash "^1.3.0"
|
||||
eventemitter3 "^4.0.7"
|
||||
find "^0.3.0"
|
||||
js-sha256 "^0.9.0"
|
||||
pako "^2.0.3"
|
||||
snake-case "^3.0.4"
|
||||
toml "^3.0.0"
|
||||
|
||||
"@project-serum/borsh@^0.2.2":
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.3.tgz#1d705c5887484cb6a127dd5feff58e90cbfcb558"
|
||||
integrity sha512-lH9zEYADZE3cxrgiFym8+jbUE3NM/LH+WOKYcUjs65CT10Q64Hv45bcAAa/phwYk4Tpz0uQ1x+ergFaAoGt67Q==
|
||||
"@project-serum/borsh@^0.2.2", "@project-serum/borsh@^0.2.5":
|
||||
version "0.2.5"
|
||||
resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.5.tgz#6059287aa624ecebbfc0edd35e4c28ff987d8663"
|
||||
integrity sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q==
|
||||
dependencies:
|
||||
bn.js "^5.1.2"
|
||||
buffer-layout "^1.2.0"
|
||||
|
||||
"@project-serum/serum@^0.13.61":
|
||||
version "0.13.61"
|
||||
resolved "https://registry.yarnpkg.com/@project-serum/serum/-/serum-0.13.61.tgz#1f0e6dfa7786a71e4317593911e9915d8b2a06e6"
|
||||
integrity sha512-aebaRGQ0/K7a5kJ9UXO59BAQFJILVu5jbGobU8GD2CTSy6SPceprB6/pgZmZLQIabhXWUHaZRF/wXIClgWataA==
|
||||
version "0.13.65"
|
||||
resolved "https://registry.yarnpkg.com/@project-serum/serum/-/serum-0.13.65.tgz#6d3cf07912f13985765237f053cca716fe84b0b0"
|
||||
integrity sha512-BHRqsTqPSfFB5p+MgI2pjvMBAQtO8ibTK2fYY96boIFkCI3TTwXDt2gUmspeChKO2pqHr5aKevmexzAcXxrSRA==
|
||||
dependencies:
|
||||
"@project-serum/anchor" "^0.11.1"
|
||||
"@solana/spl-token" "^0.1.6"
|
||||
|
@ -160,10 +160,10 @@
|
|||
bn.js "^5.1.2"
|
||||
buffer-layout "^1.2.0"
|
||||
|
||||
"@solana/buffer-layout@^3.0.0":
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-3.0.0.tgz#b9353caeb9a1589cb77a1b145bcb1a9a93114326"
|
||||
integrity sha512-MVdgAKKL39tEs0l8je0hKaXLQFb7Rdfb0Xg2LjFZd8Lfdazkg6xiS98uAZrEKvaoF3i4M95ei9RydkGIDMeo3w==
|
||||
"@solana/buffer-layout@^4.0.0":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz#75b1b11adc487234821c81dfae3119b73a5fd734"
|
||||
integrity sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ==
|
||||
dependencies:
|
||||
buffer "~6.0.3"
|
||||
|
||||
|
@ -179,23 +179,25 @@
|
|||
buffer-layout "^1.2.0"
|
||||
dotenv "10.0.0"
|
||||
|
||||
"@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0":
|
||||
version "1.31.0"
|
||||
resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.31.0.tgz#7a313d4c1a90b77f27ddbfe845a10d6883e06452"
|
||||
integrity sha512-7nHHx1JNFnrt15e9y8m38I/EJCbaB+bFC3KZVM1+QhybCikFxGMtGA5r7PDC3GEL1R2RZA8yKoLkDKo3vzzqnw==
|
||||
"@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.36.0":
|
||||
version "1.41.3"
|
||||
resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.41.3.tgz#77ef4927d533cf67d7adfeee799d5061d75a06ee"
|
||||
integrity sha512-H+zRDh7zpzma8fvA6S16DJY2sDemw4HHU/3WR9kXQG+3jsRtIJxhOD2NAwu1M2JrXoblyE2QYHWneLKDV2Bu6g==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.12.5"
|
||||
"@ethersproject/sha2" "^5.5.0"
|
||||
"@solana/buffer-layout" "^3.0.0"
|
||||
"@solana/buffer-layout" "^4.0.0"
|
||||
bn.js "^5.0.0"
|
||||
borsh "^0.4.0"
|
||||
borsh "^0.7.0"
|
||||
bs58 "^4.0.1"
|
||||
buffer "6.0.1"
|
||||
cross-fetch "^3.1.4"
|
||||
fast-stable-stringify "^1.0.0"
|
||||
jayson "^3.4.4"
|
||||
js-sha3 "^0.8.0"
|
||||
rpc-websockets "^7.4.2"
|
||||
secp256k1 "^4.0.2"
|
||||
sinon-chai "^3.7.0"
|
||||
superstruct "^0.14.2"
|
||||
tweetnacl "^1.0.0"
|
||||
|
||||
|
@ -204,13 +206,6 @@
|
|||
resolved "https://registry.yarnpkg.com/@tsconfig/recommended/-/recommended-1.0.1.tgz#7619bad397e06ead1c5182926c944e0ca6177f52"
|
||||
integrity sha512-2xN+iGTbPBEzGSnVp/Hd64vKJCJWxsi9gfs88x4PPMyEjHJoA3o5BY9r5OLPHIZU2pAQxkSAsJFqn6itClP8mQ==
|
||||
|
||||
"@types/bn.js@^4.11.5":
|
||||
version "4.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c"
|
||||
integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/connect@^3.4.33":
|
||||
version "3.4.35"
|
||||
resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1"
|
||||
|
@ -219,33 +214,33 @@
|
|||
"@types/node" "*"
|
||||
|
||||
"@types/express-serve-static-core@^4.17.9":
|
||||
version "4.17.27"
|
||||
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.27.tgz#7a776191e47295d2a05962ecbb3a4ce97e38b401"
|
||||
integrity sha512-e/sVallzUTPdyOTiqi8O8pMdBBphscvI6E4JYaKlja4Lm+zh7UFSSdW5VMkRbhDtmrONqOUHOXRguPsDckzxNA==
|
||||
version "4.17.28"
|
||||
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8"
|
||||
integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
"@types/qs" "*"
|
||||
"@types/range-parser" "*"
|
||||
|
||||
"@types/json-schema@^7.0.7":
|
||||
version "7.0.9"
|
||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
|
||||
integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
|
||||
version "7.0.11"
|
||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
|
||||
integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
|
||||
|
||||
"@types/lodash@^4.14.159":
|
||||
version "4.14.178"
|
||||
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8"
|
||||
integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==
|
||||
version "4.14.182"
|
||||
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2"
|
||||
integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==
|
||||
|
||||
"@types/node@*":
|
||||
version "17.0.8"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.8.tgz#50d680c8a8a78fe30abe6906453b21ad8ab0ad7b"
|
||||
integrity sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==
|
||||
version "17.0.30"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.30.tgz#2c6e8512acac70815e8176aa30c38025067880ef"
|
||||
integrity sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw==
|
||||
|
||||
"@types/node@^12.12.54":
|
||||
version "12.20.41"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.41.tgz#81d7734c5257da9f04354bd9084a6ebbdd5198a5"
|
||||
integrity sha512-f6xOqucbDirG7LOzedpvzjP3UTmHttRou3Mosx3vL9wr9AIQGhcPgVnqa8ihpZYnxyM1rxeNCvTyukPKZtq10Q==
|
||||
version "12.20.50"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.50.tgz#14ba5198f1754ffd0472a2f84ab433b45ee0b65e"
|
||||
integrity sha512-+9axpWx2b2JCVovr7Ilgt96uc6C1zBKOQMpGtRbWT9IoR/8ue32GGMfGA4woP8QyP2gBs6GQWEVM3tCybGCxDA==
|
||||
|
||||
"@types/qs@*":
|
||||
version "6.9.7"
|
||||
|
@ -363,9 +358,9 @@ ajv@^6.10.0, ajv@^6.12.4:
|
|||
uri-js "^4.2.2"
|
||||
|
||||
ajv@^8.0.1:
|
||||
version "8.8.2"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.8.2.tgz#01b4fef2007a28bf75f0b7fc009f62679de4abbb"
|
||||
integrity sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==
|
||||
version "8.11.0"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f"
|
||||
integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==
|
||||
dependencies:
|
||||
fast-deep-equal "^3.1.1"
|
||||
json-schema-traverse "^1.0.0"
|
||||
|
@ -440,18 +435,17 @@ bn.js@^4.11.9:
|
|||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
|
||||
integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
|
||||
|
||||
bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.2:
|
||||
bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.2, bn.js@^5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
|
||||
integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
|
||||
|
||||
borsh@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.4.0.tgz#9dd6defe741627f1315eac2a73df61421f6ddb9f"
|
||||
integrity sha512-aX6qtLya3K0AkT66CmYWCCDr77qsE9arV05OmdFpmat9qu8Pg9J5tBUPDztAW5fNh/d/MyVG/OYziP52Ndzx1g==
|
||||
borsh@^0.7.0:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a"
|
||||
integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==
|
||||
dependencies:
|
||||
"@types/bn.js" "^4.11.5"
|
||||
bn.js "^5.0.0"
|
||||
bn.js "^5.2.0"
|
||||
bs58 "^4.0.0"
|
||||
text-encoding-utf-8 "^1.0.2"
|
||||
|
||||
|
@ -463,7 +457,14 @@ brace-expansion@^1.1.7:
|
|||
balanced-match "^1.0.0"
|
||||
concat-map "0.0.1"
|
||||
|
||||
braces@^3.0.1:
|
||||
brace-expansion@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
|
||||
integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
|
||||
dependencies:
|
||||
balanced-match "^1.0.0"
|
||||
|
||||
braces@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
|
||||
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
|
||||
|
@ -487,7 +488,7 @@ buffer-from@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
|
||||
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
|
||||
|
||||
buffer-layout@^1.2.0:
|
||||
buffer-layout@^1.2.0, buffer-layout@^1.2.2:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5"
|
||||
integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==
|
||||
|
@ -542,11 +543,6 @@ chalk@^4.0.0:
|
|||
ansi-styles "^4.1.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
circular-json@^0.5.9:
|
||||
version "0.5.9"
|
||||
resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.9.tgz#932763ae88f4f7dead7a0d09c8a51a4743a53b1d"
|
||||
integrity sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==
|
||||
|
||||
color-convert@^1.9.0:
|
||||
version "1.9.3"
|
||||
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
||||
|
@ -586,12 +582,12 @@ create-require@^1.1.0:
|
|||
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
|
||||
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
|
||||
|
||||
cross-fetch@^3.1.4:
|
||||
version "3.1.4"
|
||||
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.4.tgz#9723f3a3a247bf8b89039f3a380a9244e8fa2f39"
|
||||
integrity sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==
|
||||
cross-fetch@^3.1.4, cross-fetch@^3.1.5:
|
||||
version "3.1.5"
|
||||
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"
|
||||
integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==
|
||||
dependencies:
|
||||
node-fetch "2.6.1"
|
||||
node-fetch "2.6.7"
|
||||
|
||||
cross-spawn@^7.0.2:
|
||||
version "7.0.3"
|
||||
|
@ -608,9 +604,9 @@ crypto-hash@^1.3.0:
|
|||
integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==
|
||||
|
||||
debug@^4.0.1, debug@^4.1.1, debug@^4.3.1:
|
||||
version "4.3.3"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
|
||||
integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
|
||||
version "4.3.4"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
||||
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
|
@ -845,9 +841,9 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
|
|||
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
|
||||
|
||||
fast-glob@^3.2.9:
|
||||
version "3.2.9"
|
||||
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.9.tgz#8f55f664b68a236bd29fa165817fc44f2b11faba"
|
||||
integrity sha512-MBwILhhD92sziIrMQwpqcuGERF+BH99ei2a3XsGJuqEKcSycAL+w0HWokFenZXona+kjFr82Lf71eTxNRC06XQ==
|
||||
version "3.2.11"
|
||||
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
|
||||
integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
|
||||
dependencies:
|
||||
"@nodelib/fs.stat" "^2.0.2"
|
||||
"@nodelib/fs.walk" "^1.2.3"
|
||||
|
@ -865,6 +861,11 @@ fast-levenshtein@^2.0.6:
|
|||
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
|
||||
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
|
||||
|
||||
fast-stable-stringify@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313"
|
||||
integrity sha1-XFVDRisiru79NtBbNOUceMuG0xM=
|
||||
|
||||
fastq@^1.6.0:
|
||||
version "1.13.0"
|
||||
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
|
||||
|
@ -902,9 +903,9 @@ flat-cache@^3.0.4:
|
|||
rimraf "^3.0.2"
|
||||
|
||||
flatted@^3.1.0:
|
||||
version "3.2.4"
|
||||
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2"
|
||||
integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==
|
||||
version "3.2.5"
|
||||
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3"
|
||||
integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==
|
||||
|
||||
fs.realpath@^1.0.0:
|
||||
version "1.0.0"
|
||||
|
@ -936,9 +937,9 @@ glob@^7.1.3, glob@^7.2.0:
|
|||
path-is-absolute "^1.0.0"
|
||||
|
||||
globals@^13.6.0, globals@^13.9.0:
|
||||
version "13.12.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e"
|
||||
integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==
|
||||
version "13.13.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b"
|
||||
integrity sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==
|
||||
dependencies:
|
||||
type-fest "^0.20.2"
|
||||
|
||||
|
@ -1175,10 +1176,10 @@ make-error@^1.1.1:
|
|||
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
|
||||
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
|
||||
|
||||
marked@^3.0.8:
|
||||
version "3.0.8"
|
||||
resolved "https://registry.yarnpkg.com/marked/-/marked-3.0.8.tgz#2785f0dc79cbdc6034be4bb4f0f0a396bd3f8aeb"
|
||||
integrity sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==
|
||||
marked@^4.0.12:
|
||||
version "4.0.14"
|
||||
resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.14.tgz#7a3a5fa5c80580bac78c1ed2e3b84d7bd6fc3870"
|
||||
integrity sha512-HL5sSPE/LP6U9qKgngIIPTthuxC0jrfxpYMZ3LdGDD3vTnLs59m2Z7r6+LNDR3ToqEQdkKd6YaaEfJhodJmijQ==
|
||||
|
||||
merge2@^1.3.0, merge2@^1.4.1:
|
||||
version "1.4.1"
|
||||
|
@ -1186,12 +1187,12 @@ merge2@^1.3.0, merge2@^1.4.1:
|
|||
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
|
||||
|
||||
micromatch@^4.0.4:
|
||||
version "4.0.4"
|
||||
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
|
||||
integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
|
||||
version "4.0.5"
|
||||
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
|
||||
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
|
||||
dependencies:
|
||||
braces "^3.0.1"
|
||||
picomatch "^2.2.3"
|
||||
braces "^3.0.2"
|
||||
picomatch "^2.3.1"
|
||||
|
||||
minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
|
||||
version "1.0.1"
|
||||
|
@ -1204,12 +1205,19 @@ minimalistic-crypto-utils@^1.0.1:
|
|||
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
|
||||
|
||||
minimatch@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
||||
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
|
||||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
minimatch@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b"
|
||||
integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==
|
||||
dependencies:
|
||||
brace-expansion "^2.0.1"
|
||||
|
||||
ms@2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
||||
|
@ -1233,15 +1241,17 @@ node-addon-api@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32"
|
||||
integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==
|
||||
|
||||
node-fetch@2.6.1:
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
|
||||
integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
|
||||
node-fetch@2.6.7:
|
||||
version "2.6.7"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
|
||||
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
|
||||
dependencies:
|
||||
whatwg-url "^5.0.0"
|
||||
|
||||
node-gyp-build@^4.2.0, node-gyp-build@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3"
|
||||
integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4"
|
||||
integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==
|
||||
|
||||
once@^1.3.0:
|
||||
version "1.4.0"
|
||||
|
@ -1289,7 +1299,7 @@ path-type@^4.0.0:
|
|||
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
|
||||
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
|
||||
|
||||
picomatch@^2.2.3:
|
||||
picomatch@^2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
|
||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||
|
@ -1300,9 +1310,9 @@ prelude-ls@^1.2.1:
|
|||
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
|
||||
|
||||
prettier@^2.0.5:
|
||||
version "2.5.1"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a"
|
||||
integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==
|
||||
version "2.6.2"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032"
|
||||
integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==
|
||||
|
||||
progress@^2.0.0:
|
||||
version "2.0.3"
|
||||
|
@ -1352,15 +1362,14 @@ rimraf@^3.0.2:
|
|||
glob "^7.1.3"
|
||||
|
||||
rpc-websockets@^7.4.2:
|
||||
version "7.4.16"
|
||||
resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.4.16.tgz#eb701cdef577d4357ba5f526d50e25f370396fac"
|
||||
integrity sha512-0b7OVhutzwRIaYAtJo5tqtaQTWKfwAsKnaThOSOy+VkhVdleNUgb8eZnWSdWITRZZEigV5uPEIDr5KZe4DBrdQ==
|
||||
version "7.4.18"
|
||||
resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.4.18.tgz#274c825c0efadbf6fe75f10289229ae537fe9ffb"
|
||||
integrity sha512-bVu+4qM5CkGVlTqJa6FaAxLbb5uRnyH4te7yjFvoCzbnif7PT4BcvXtNTprHlNvsH+/StB81zUQicxMrUrIomA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.11.2"
|
||||
circular-json "^0.5.9"
|
||||
"@babel/runtime" "^7.17.2"
|
||||
eventemitter3 "^4.0.7"
|
||||
uuid "^8.3.0"
|
||||
ws "^7.4.5"
|
||||
uuid "^8.3.2"
|
||||
ws "^8.5.0"
|
||||
optionalDependencies:
|
||||
bufferutil "^4.0.1"
|
||||
utf-8-validate "^5.0.2"
|
||||
|
@ -1387,9 +1396,9 @@ secp256k1@^4.0.2:
|
|||
node-gyp-build "^4.2.0"
|
||||
|
||||
semver@^7.2.1, semver@^7.3.5:
|
||||
version "7.3.5"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
|
||||
integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
|
||||
version "7.3.7"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
|
||||
integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
|
||||
dependencies:
|
||||
lru-cache "^6.0.0"
|
||||
|
||||
|
@ -1405,15 +1414,20 @@ shebang-regex@^3.0.0:
|
|||
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
|
||||
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
|
||||
|
||||
shiki@^0.9.12:
|
||||
version "0.9.15"
|
||||
resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.9.15.tgz#2481b46155364f236651319d2c18e329ead6fa44"
|
||||
integrity sha512-/Y0z9IzhJ8nD9nbceORCqu6NgT9X6I8Fk8c3SICHI5NbZRLdZYFaB233gwct9sU0vvSypyaL/qaKvzyQGJBZSw==
|
||||
shiki@^0.10.1:
|
||||
version "0.10.1"
|
||||
resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.10.1.tgz#6f9a16205a823b56c072d0f1a0bcd0f2646bef14"
|
||||
integrity sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==
|
||||
dependencies:
|
||||
jsonc-parser "^3.0.0"
|
||||
vscode-oniguruma "^1.6.1"
|
||||
vscode-textmate "5.2.0"
|
||||
|
||||
sinon-chai@^3.7.0:
|
||||
version "3.7.0"
|
||||
resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-3.7.0.tgz#cfb7dec1c50990ed18c153f1840721cf13139783"
|
||||
integrity sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==
|
||||
|
||||
slash@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
|
||||
|
@ -1532,6 +1546,11 @@ toml@^3.0.0:
|
|||
resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee"
|
||||
integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==
|
||||
|
||||
tr46@~0.0.3:
|
||||
version "0.0.3"
|
||||
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
|
||||
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
|
||||
|
||||
traverse-chain@~0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1"
|
||||
|
@ -1555,9 +1574,9 @@ tslib@^1.8.1:
|
|||
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
|
||||
|
||||
tslib@^2.0.3:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
|
||||
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
|
||||
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
|
||||
|
||||
tsutils@^3.21.0:
|
||||
version "3.21.0"
|
||||
|
@ -1584,20 +1603,20 @@ type-fest@^0.20.2:
|
|||
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
|
||||
|
||||
typedoc@^0.22.5:
|
||||
version "0.22.10"
|
||||
resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.10.tgz#221e1a2b17bcb71817ef027dc4c4969d572e7620"
|
||||
integrity sha512-hQYZ4WtoMZ61wDC6w10kxA42+jclWngdmztNZsDvIz7BMJg7F2xnT+uYsUa7OluyKossdFj9E9Ye4QOZKTy8SA==
|
||||
version "0.22.15"
|
||||
resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.15.tgz#c6ad7ed9d017dc2c3a06c9189cb392bd8e2d8c3f"
|
||||
integrity sha512-CMd1lrqQbFvbx6S9G6fL4HKp3GoIuhujJReWqlIvSb2T26vGai+8Os3Mde7Pn832pXYemd9BMuuYWhFpL5st0Q==
|
||||
dependencies:
|
||||
glob "^7.2.0"
|
||||
lunr "^2.3.9"
|
||||
marked "^3.0.8"
|
||||
minimatch "^3.0.4"
|
||||
shiki "^0.9.12"
|
||||
marked "^4.0.12"
|
||||
minimatch "^5.0.1"
|
||||
shiki "^0.10.1"
|
||||
|
||||
typescript@^4.1.3:
|
||||
version "4.5.4"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8"
|
||||
integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==
|
||||
version "4.6.4"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9"
|
||||
integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==
|
||||
|
||||
uri-js@^4.2.2:
|
||||
version "4.4.1"
|
||||
|
@ -1607,13 +1626,13 @@ uri-js@^4.2.2:
|
|||
punycode "^2.1.0"
|
||||
|
||||
utf-8-validate@^5.0.2:
|
||||
version "5.0.8"
|
||||
resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.8.tgz#4a735a61661dbb1c59a0868c397d2fe263f14e58"
|
||||
integrity sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==
|
||||
version "5.0.9"
|
||||
resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3"
|
||||
integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==
|
||||
dependencies:
|
||||
node-gyp-build "^4.3.0"
|
||||
|
||||
uuid@^8.3.0, uuid@^8.3.2:
|
||||
uuid@^8.3.2:
|
||||
version "8.3.2"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
||||
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
|
||||
|
@ -1624,15 +1643,28 @@ v8-compile-cache@^2.0.3:
|
|||
integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
|
||||
|
||||
vscode-oniguruma@^1.6.1:
|
||||
version "1.6.1"
|
||||
resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz#2bf4dfcfe3dd2e56eb549a3068c8ee39e6c30ce5"
|
||||
integrity sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==
|
||||
version "1.6.2"
|
||||
resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz#aeb9771a2f1dbfc9083c8a7fdd9cccaa3f386607"
|
||||
integrity sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==
|
||||
|
||||
vscode-textmate@5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e"
|
||||
integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==
|
||||
|
||||
webidl-conversions@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
|
||||
integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
|
||||
|
||||
whatwg-url@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
|
||||
integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0=
|
||||
dependencies:
|
||||
tr46 "~0.0.3"
|
||||
webidl-conversions "^3.0.0"
|
||||
|
||||
which@^2.0.1:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
|
||||
|
@ -1651,9 +1683,14 @@ wrappy@1:
|
|||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||
|
||||
ws@^7.4.5:
|
||||
version "7.5.6"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b"
|
||||
integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==
|
||||
version "7.5.7"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67"
|
||||
integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==
|
||||
|
||||
ws@^8.5.0:
|
||||
version "8.5.0"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f"
|
||||
integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==
|
||||
|
||||
yallist@^4.0.0:
|
||||
version "4.0.0"
|
||||
|
|
Loading…
Reference in New Issue