From fbd346a36b81b73b4cb88d515c47d2f83d15b42c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Fri, 24 Apr 2020 02:04:12 +0200 Subject: [PATCH] pond: Method mapping generator --- Makefile | 5 + lotuspond/front/src/Address.js | 2 +- lotuspond/front/src/chain/code.js | 12 --- lotuspond/front/src/chain/code.json | 13 +++ lotuspond/front/src/chain/methodgen.go | 85 +++++++++++++++++ .../src/chain/{methods.js => methods.json} | 94 ++++++++++--------- 6 files changed, 155 insertions(+), 56 deletions(-) delete mode 100644 lotuspond/front/src/chain/code.js create mode 100644 lotuspond/front/src/chain/code.json create mode 100644 lotuspond/front/src/chain/methodgen.go rename lotuspond/front/src/chain/{methods.js => methods.json} (59%) diff --git a/Makefile b/Makefile index 91940bbe3..2793ac247 100644 --- a/Makefile +++ b/Makefile @@ -189,5 +189,10 @@ dist-clean: type-gen: go run ./gen/main.go +method-gen: + (cd ./lotuspond/front/src/chain && go run ./methodgen.go) + +gen: type-gen method-gen + print-%: @echo $*=$($*) diff --git a/lotuspond/front/src/Address.js b/lotuspond/front/src/Address.js index 9167abfb1..7ca2ea888 100644 --- a/lotuspond/front/src/Address.js +++ b/lotuspond/front/src/Address.js @@ -3,7 +3,7 @@ import CID from 'cids' import ReactTooltip from 'react-tooltip' import * as multihash from "multihashes" import State from "./State" -import methods from "./chain/methods" +import methods from "./chain/methods.json" import Fil from "./Fil"; function truncAddr(addr, len) { diff --git a/lotuspond/front/src/chain/code.js b/lotuspond/front/src/chain/code.js deleted file mode 100644 index af519c9c2..000000000 --- a/lotuspond/front/src/chain/code.js +++ /dev/null @@ -1,12 +0,0 @@ -export default { - system: "fil/1/system", - init: "fil/1/init", - cron: "fil/1/cron", - account: "fil/1/account", - power: "fil/1/storagepower", - miner: "fil/1/storageminer", - market: "fil/1/storagemarket", - paych: "fil/1/paymentchannel", - multisig: "fil/1/multisig", - reward: "fil/1/reward", -} diff --git a/lotuspond/front/src/chain/code.json b/lotuspond/front/src/chain/code.json new file mode 100644 index 000000000..098b40244 --- /dev/null +++ b/lotuspond/front/src/chain/code.json @@ -0,0 +1,13 @@ +{ + "account": "fil/1/account", + "cron": "fil/1/cron", + "init": "fil/1/init", + "market": "fil/1/storagemarket", + "miner": "fil/1/storageminer", + "multisig": "fil/1/multisig", + "paych": "fil/1/paymentchannel", + "power": "fil/1/storagepower", + "reward": "fil/1/reward", + "system": "fil/1/system", + "verifreg": "fil/1/verifiedregistry" +} \ No newline at end of file diff --git a/lotuspond/front/src/chain/methodgen.go b/lotuspond/front/src/chain/methodgen.go new file mode 100644 index 000000000..3197803fe --- /dev/null +++ b/lotuspond/front/src/chain/methodgen.go @@ -0,0 +1,85 @@ +package main + +import ( + "encoding/json" + "io/ioutil" + "os" + "reflect" + + "github.com/ipfs/go-cid" + "github.com/multiformats/go-multihash" + + "github.com/filecoin-project/specs-actors/actors/builtin" +) + +func main() { + if _, err := os.Stat("code.json"); err != nil { + panic(err) // note: must run in lotuspond/front/src/chain + } + + names := map[string]string{ + "system": "fil/1/system", + "init": "fil/1/init", + "cron": "fil/1/cron", + "account": "fil/1/account", + "power": "fil/1/storagepower", + "miner": "fil/1/storageminer", + "market": "fil/1/storagemarket", + "paych": "fil/1/paymentchannel", + "multisig": "fil/1/multisig", + "reward": "fil/1/reward", + "verifreg": "fil/1/verifiedregistry", + } + + { + b, err := json.MarshalIndent(names, "", " ") + if err != nil { + panic(err) + } + + if err := ioutil.WriteFile("code.json", b, 0664); err != nil { + panic(err) + } + } + + methods := map[cid.Cid]interface{}{ + // builtin.SystemActorCodeID: builtin.MethodsSystem - apparently it doesn't have methods + builtin.InitActorCodeID: builtin.MethodsInit, + builtin.CronActorCodeID: builtin.MethodsCron, + builtin.AccountActorCodeID: builtin.MethodsAccount, + builtin.StoragePowerActorCodeID: builtin.MethodsPower, + builtin.StorageMinerActorCodeID: builtin.MethodsMiner, + builtin.StorageMarketActorCodeID: builtin.MethodsMarket, + builtin.PaymentChannelActorCodeID: builtin.MethodsPaych, + builtin.MultisigActorCodeID: builtin.MethodsMultisig, + builtin.RewardActorCodeID: builtin.MethodsReward, + builtin.VerifiedRegistryActorCodeID: builtin.MethodsVerifiedRegistry, + } + + out := map[string][]string{} + for c, methods := range methods { + cmh, err := multihash.Decode(c.Hash()) + if err != nil { + panic(err) + } + + rt := reflect.TypeOf(methods) + nf := rt.NumField() + + out[string(cmh.Digest)] = append(out[string(cmh.Digest)], "Send") + for i := 0; i < nf; i++ { + out[string(cmh.Digest)] = append(out[string(cmh.Digest)], rt.Field(i).Name) + } + } + + { + b, err := json.MarshalIndent(out, "", " ") + if err != nil { + panic(err) + } + + if err := ioutil.WriteFile("methods.json", b, 0664); err != nil { + panic(err) + } + } +} diff --git a/lotuspond/front/src/chain/methods.js b/lotuspond/front/src/chain/methods.json similarity index 59% rename from lotuspond/front/src/chain/methods.js rename to lotuspond/front/src/chain/methods.json index 8e2896836..5a2de5d7f 100644 --- a/lotuspond/front/src/chain/methods.js +++ b/lotuspond/front/src/chain/methods.json @@ -1,47 +1,45 @@ -import code from "./code"; - -export default { - [code.account]: [ +{ + "fil/1/account": [ "Send", "Constructor", - "PubkeyAddress", + "PubkeyAddress" ], - [code.init]: [ + "fil/1/cron": [ "Send", "Constructor", - "Exec", + "EpochTick" ], - [code.cron]: [ + "fil/1/init": [ "Send", "Constructor", - "EpochTick", + "Exec" ], - [code.reward]: [ - "Send", - "Constructor", - "AwardBlockReward", - "WithdrawReward", - ], - [code.multisig]: [ + "fil/1/multisig": [ "Send", "Constructor", "Propose", "Approve", "Cancel", - "ClearCompleted", "AddSigner", "RemoveSigner", "SwapSigner", - "ChangeNumApprovalsThreshold", + "ChangeNumApprovalsThreshold" ], - [code.paych]: [ + "fil/1/paymentchannel": [ "Send", "Constructor", "UpdateChannelState", "Settle", - "Collect", + "Collect" ], - [code.market]: [ + "fil/1/reward": [ + "Send", + "Constructor", + "AwardBlockReward", + "LastPerEpochReward", + "UpdateNetworkKPI" + ], + "fil/1/storagemarket": [ "Send", "Constructor", "AddBalance", @@ -51,39 +49,49 @@ export default { "VerifyDealsOnSectorProveCommit", "OnMinerSectorsTerminate", "ComputeDataCommitment", - "GetWeightForDealSet", + "HandleInitTimeoutDeals" ], - [code.power]: [ - "Send", - "Constructor", - "AddBalance", - "WithdrawBalance", - "CreateMiner", - "DeleteMiner", - "OnSectorProveCommit", - "OnSectorTerminate", - "OnSectorTemporaryFaultEffectiveBegin", - "OnSectorTemporaryFaultEffectiveEnd", - "OnSectorModifyWeightDesc", - "OnMinerWindowedPoStSuccess", - "OnMinerWindowedPoStFailure", - "EnrollCronEvent", - "ReportConsensusFault", - "OnEpochTickEnd", - ], - [code.miner]: [ + "fil/1/storageminer": [ "Send", "Constructor", "ControlAddresses", "ChangeWorkerAddress", "ChangePeerID", "SubmitWindowedPoSt", - "OnDeleteMiner", "PreCommitSector", "ProveCommitSector", "ExtendSectorExpiration", "TerminateSectors", - "DeclareTemporaryFaults", + "DeclareFaults", + "DeclareFaultsRecovered", "OnDeferredCronEvent", + "CheckSectorProven", + "AddLockedFund", + "ReportConsensusFault", + "WithdrawBalance" ], + "fil/1/storagepower": [ + "Send", + "Constructor", + "CreateMiner", + "DeleteMiner", + "OnSectorProveCommit", + "OnSectorTerminate", + "OnFaultBegin", + "OnFaultEnd", + "OnSectorModifyWeightDesc", + "EnrollCronEvent", + "OnEpochTickEnd", + "UpdatePledgeTotal", + "OnConsensusFault" + ], + "fil/1/verifiedregistry": [ + "Send", + "Constructor", + "AddVerifier", + "RemoveVerifier", + "AddVerifiedClient", + "UseBytes", + "RestoreBytes" + ] } \ No newline at end of file