pond: Method mapping generator

This commit is contained in:
Łukasz Magiera 2020-04-24 02:04:12 +02:00
parent 9b55f4b471
commit fbd346a36b
6 changed files with 155 additions and 56 deletions

View File

@ -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 $*=$($*)

View File

@ -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) {

View File

@ -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",
}

View File

@ -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"
}

View File

@ -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)
}
}
}

View File

@ -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"
]
}