GithubHelp home page GithubHelp logo

flare-foundation / go-songbird Goto Github PK

View Code? Open in Web Editor NEW
66.0 66.0 31.0 44.19 MB

License: BSD 3-Clause "New" or "Revised" License

Shell 0.19% Go 98.97% Solidity 0.02% JavaScript 0.81% Dockerfile 0.01%

go-songbird's People

Contributors

aljaxus avatar aljazs-flare avatar awfm9 avatar joshuagedwards avatar mboben avatar mkamau-flr avatar sprwn avatar

Stargazers

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

Watchers

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

go-songbird's Issues

Introduce list of static beacons

We currently don't provide any static list of beacons for any of the networks. This is a security risk, because all of the beacons are injected through the command line parameters. If an attacker manages to get someone to change the related command line parameters, he can put nodes on an alternative network that he controls.

By having a small set of nodes that are static and always used for bootstrapping, we can avoid this problem. Even with an invalid command line parameter, some of the nodes will be correct, and the node will at least be able to tell something strange is going on.

Intermittent failure to initialize C-Chain on start-up

Sometimes, nodes will fail to initialize the C-Chain on start-up, which leads to messages not being processed because of an unknown chain, which in turns leads to bootstrapping failure:

Failed run:

➜  flare git:(78f063ca) ./build/flare --network-id=coston --http-host 0.0.0.0 \
--bootstrap-ips="$(curl -m 10 -sX POST --data '{ "jsonrpc":"2.0", "id":1, "method":"info.getNodeIP" }' -H 'content-type:application/json;' https://coston.flare.network/ext/info | jq -r ".result.ip")" \
--bootstrap-ids="$(curl -m 10 -sX POST --data '{ "jsonrpc":"2.0", "id":1, "method":"info.getNodeID" }' -H 'content-type:application/json;' https://coston.flare.network/ext/info | jq -r ".result.nodeID")"


 (     (              (        
 )\ )  )\ )    (      )\ )   
(()/( (()/(    )\    (()/( (
 /(_)) /(_))((((_)(   /(_)))\
(_))_|(_))   )\ _ )\ (_)) ((_)
| |_  | |    (_)_\(_)| _ \| __|
| __| | |__   / _ \  |   /| _|
|_|   |____| /_/ \_\ |_|_\|___|

INFO [02-26|16:45:31.704] database/leveldb/db.go#121: leveldb config: {"blockCacheCapacity":12582912,"blockSize":0,"compactionExpandLimitFactor":0,"compactionGPOverlapsFactor":0,"compactionL0Trigger":0,"compactionSourceLimitFactor":0,"compactionTableSize":0,"compactionTableSizeMultiplier":0,"compactionTableSizeMultiplierPerLevel":null,"compactionTotalSize":0,"compactionTotalSizeMultiplier":0,"openFilesCacheCapacity":64,"writeBuffer":6291456,"filterBitsPerKey":10}
WARN [02-26|16:45:31.717] app/process/process.go#123: UPnP or NAT-PMP router attach failed, you may not be listening publicly. Please confirm the settings in your router
INFO [02-26|16:45:31.717] node/node.go#1112: node version is: flare/0.5.2
INFO [02-26|16:45:31.717] node/node.go#1113: node ID is: NodeID-G35PbtWjs2DsSihe2FhPAN5yREomkTxNY
INFO [02-26|16:45:31.717] node/node.go#1114: current database version: v1.4.5
INFO [02-26|16:45:31.717] node/node.go#488: initializing API server
INFO [02-26|16:45:31.717] api/server/server.go#82: API created with allowed origins: [*]
INFO [02-26|16:45:31.717] node/node.go#808: initializing metrics API
INFO [02-26|16:45:31.717] api/server/server.go#219: adding route /ext/metrics
INFO [02-26|16:45:31.717] node/node.go#774: initializing keystore
INFO [02-26|16:45:31.718] node/node.go#785: initializing keystore API
INFO [02-26|16:45:31.718] api/server/server.go#219: adding route /ext/keystore
INFO [02-26|16:45:31.718] node/node.go#766: initializing SharedMemory
INFO [02-26|16:45:31.718] node/node.go#182: this node's IP is set to: "172.31.25.163:9651"
INFO [02-26|16:45:31.719] node/node.go#929: initializing Health API
INFO [02-26|16:45:31.719] api/server/server.go#219: adding route /ext/health
INFO [02-26|16:45:31.719] api/server/server.go#219: adding route /ext/health/readiness
INFO [02-26|16:45:31.719] api/server/server.go#219: adding route /ext/health/health
INFO [02-26|16:45:31.719] api/server/server.go#219: adding route /ext/health/liveness
INFO [02-26|16:45:31.719] node/node.go#534: adding the default VM aliases
INFO [02-26|16:45:31.720] api/server/server.go#219: adding route /ext/vm/mgj786NP7uDwBCcq6YwThhaN8FLyybkCa4zBWTQbNgmK6k9A6/rpc
INFO [02-26|16:45:31.720] api/server/server.go#219: adding route /ext/vm/rWhpuQPF1kb72esV2momhMuTYGkEb1oL29pt2EBXWmSy4kxnT
INFO [02-26|16:45:31.720] api/server/server.go#219: adding route /ext/vm/jvYyfQTxGMJLuGWa55kdP2p2zSUYsQ5Raupu4TW34ZAUBAbtq
INFO [02-26|16:45:31.720] node/node.go#839: node config:
{"httpConfig":{"apiConfig":{"authConfig":{"apiRequireAuthToken":false},"indexerConfig":{"indexAPIEnabled":false,"indexAllowIncomplete":false},"ipcConfig":{"ipcAPIEnabled":false,"ipcPath":"/tmp","ipcDefaultChainIDs":null},"adminAPIEnabled":false,"infoAPIEnabled":true,"keystoreAPIEnabled":true,"metricsAPIEnabled":true,"healthAPIEnabled":true},"httpHost":"0.0.0.0","httpPort":9650,"httpsEnabled":false,"apiAllowedOrigins":["*"],"shutdownTimeout":10000000000,"shutdownWait":0},"ipConfig":{"ip":{"ip":"172.31.25.163","port":9651},"attemptedNATTraversal":true,"dynamicUpdateDuration":300000000000},"stakingConfig":{"uptimeRequirement":0.8,"minValidatorStake":1000000000,"maxValidatorStake":3000000000000000,"minDelegatorStake":1000000000,"minDelegationFee":20000,"minStakeDuration":86400000000000,"maxStakeDuration":31536000000000000,"rewardConfig":{"maxConsumptionRate":120000,"minConsumptionRate":100000,"mintingPeriod":31536000000000000,"supplyCap":720000000000000000},"enableStaking":true,"disabledStakingWeight":100,"stakingKeyPath":"/home/ec2-user/.flare/staking/staker.key","stakingCertPath":"/home/ec2-user/.flare/staking/staker.crt"},"txFeeConfig":{"txFee":1000000,"createAssetTxFee":10000000,"createSubnetTxFee":100000000,"createBlockchainTxFee":100000000},"bootstrapConfig":{"retryBootstrap":true,"retryBootstrapWarnFrequency":50,"bootstrapBeaconConnectionTimeout":60000000000,"bootstrapAncestorsMaxContainersSent":2000,"bootstrapAncestorsMaxContainersReceived":2000,"bootstrapMaxTimeGetAncestors":50000000,"bootstrapIDs":["CAAFL413GxJEKxUgF7dHWAHYDmfQRKWp3"],"bootstrapIPs":[{"ip":"34.159.134.207","port":9651}]},"databaseConfig":{"path":"/home/ec2-user/.flare/db/coston","name":"leveldb"},"avaxAssetID":"sMWvCcweHFoG4SE1SSVtiwosqezUW8tAA77t7BhAS7RUh6ms4","networkID":7,"enableAssertions":true,"enableCrypto":true,"healthCheckFreq":30000000000,"networkConfig":{"healthConfig":{"minConnectedPeers":1,"maxTimeSinceMsgReceived":60000000000,"maxTimeSinceMsgSent":60000000000,"maxPortionSendQueueBytesFull":0.9,"maxSendFailRate":0.9,"maxSendFailRateHalflife":10000000000},"peerListGossipConfig":{"peerListSize":20,"peerListGossipSize":50,"peerListStakerGossipFraction":2,"peerListGossipFreq":60000000000},"gossipConfig":{"gossipAcceptedFrontierSize":35,"gossipOnAcceptSize":20,"appGossipNonValidatorSize":0,"appGossipValidatorSize":10},"timeoutConfigs":{"getVersionTimeout":10000000000,"pingPongTimeout":30000000000,"readHandshakeTimeout":15000000000,"peerAliasTimeout":600000000000},"delayConfig":{"initialReconnectDelay":1000000000,"maxReconnectDelay":3600000000000},"throttlerConfig":{"inboundConnUpgradeThrottlerConfig":{"upgradeCooldown":10000000000,"maxRecentConnsUpgraded":2560},"inboundMsgThrottlerConfig":{"vdrAllocSize":33554432,"atLargeAllocSize":6291456,"nodeMaxAtLargeBytes":2097152,"bandwidthRefillRate":524288,"bandwidthMaxBurstRate":2097152,"maxProcessingMsgsPerNode":1024},"outboundMsgThrottlerConfig":{"vdrAllocSize":33554432,"atLargeAllocSize":6291456,"nodeMaxAtLargeBytes":2097152},"maxIncomingConnsPerSec":256},"dialerConfig":{"throttleRps":50,"connectionTimeout":30000000000},"namespace":"network","myNodeID":"G35PbtWjs2DsSihe2FhPAN5yREomkTxNY","myIP":{"ip":"172.31.25.163","port":9651},"networkID":7,"maxClockDifference":60000000000,"pingFrequency":22500000000,"allowPrivateIPs":true,"compressionEnabled":true,"whitelistedSubnets":[],"beacons":{},"validators":{},"uptimeMetricFreq":30000000000,"uptimeRequirement":0.8,"requireValidatorToConnect":false},"adaptiveTimeoutConfig":{"initialTimeout":5000000000,"minimumTimeout":2000000000,"maximumTimeout":10000000000,"timeoutCoefficient":2,"timeoutHalflife":300000000000},"benchlistConfig":{"threshold":10,"minimumFailingDuration":150000000000,"duration":900000000000,"maxPortion":0.08333333333333333,"peerSummaryEnabled":false},"profilerConfig":{"dir":"/home/ec2-user/.flare/profiles","enabled":false,"freq":900000000000,"maxNumFiles":5},"loggingConfig":{"rotationInterval":86400000000000,"fileSize":8388608,"rotationSize":7,"flushSize":1,"disableLogging":false,"disableDisplaying":false,"disableContextualDisplaying":false,"disableFlushOnWrite":false,"assertions":false,"logLevel":"INFO","displayLevel":"INFO","displayHighlight":"COLORS"},"pluginDir":"/home/ec2-user/flare/build/plugins","consensusParams":{"k":20,"alpha":15,"betaVirtuous":15,"betaRogue":20,"concurrentRepolls":4,"optimalProcessing":50,"maxOutstandingItems":1024,"maxItemProcessingTime":120000000000,"parents":5,"batchSize":30},"meterVMEnabled":true,"routerHealthConfig":{"maxDropRate":1,"maxDropRateHalflife":10000000000,"maxOutstandingRequests":1024,"maxOutstandingDuration":300000000000,"maxRunTimeRequests":10000000000},"consensusShutdownTimeout":5000000000,"consensusGossipFreq":10000000000,"whitelistedSubnets":[],"subnetConfigs":{},"resetProposerVMHeightIndex":false}
INFO [02-26|16:45:31.720] node/node.go#841: skipping admin API initialization because it has been disabled
INFO [02-26|16:45:31.720] node/node.go#889: initializing info API
INFO [02-26|16:45:31.721] api/server/server.go#219: adding route /ext/info
INFO [02-26|16:45:31.721] node/node.go#1051: skipping ipc API initialization because it has been disabled
INFO [02-26|16:45:31.721] node/node.go#1064: initializing chain aliases
INFO [02-26|16:45:31.721] node/node.go#1082: initializing API aliases
INFO [02-26|16:45:31.721] node/node.go#864: skipping profiler initialization because it has been disabled
INFO [02-26|16:45:31.721] node/node.go#474: initializing chains
INFO [02-26|16:45:31.721] chains/manager.go#253: creating chain:
    ID: 11111111111111111111111111111111LpoYY
    VMID:rWhpuQPF1kb72esV2momhMuTYGkEb1oL29pt2EBXWmSy4kxnT
INFO [02-26|16:45:31.723] <P Chain> vms/platformvm/vm.go#202: initializing last accepted block as 2RQJxpDt3t2MnEFZsBKWSSy6GUCAJXzWxsLqvAHkjk4BrPPyKt
INFO [02-26|16:45:31.724] <P Chain> snow/engine/snowman/transitive.go#67: initializing consensus engine
INFO [02-26|16:45:31.724] <P Chain> snow/engine/snowman/bootstrap/bootstrapper.go#222: Starting bootstrap...
INFO [02-26|16:45:31.725] api/server/server.go#203: adding route /ext/bc/11111111111111111111111111111111LpoYY
INFO [02-26|16:45:31.725] api/server/server.go#114: HTTP API server listening on "0.0.0.0:9650"
FATAL[02-26|16:46:31.719] node/node.go#227: Failed to connect to bootstrap nodes. Node shutting down...
INFO [02-26|16:46:31.719] node/node.go#1215: shutting down node with exit code 1
INFO [02-26|16:46:31.719] ipcs/chainipc.go#101: shutting down chain IPCs
INFO [02-26|16:46:31.719] chains/manager.go#916: shutting down chain manager
INFO [02-26|16:46:31.719] snow/networking/router/chain_router.go#250: shutting down chain router
INFO [02-26|16:46:31.719] <P Chain> snow/engine/snowman/transitive.go#282: shutting down consensus engine
INFO [02-26|16:46:31.719] network/network.go#690: shutting down network
INFO [02-26|16:46:31.720] node/node.go#1256: cleaning up plugin subprocesses
INFO [02-26|16:46:31.720] node/node.go#1259: finished node shutdown
INFO [02-26|16:46:31.720] nat/nat.go#152: Unmapped all ports

Successful run:

➜  flare git:(78f063ca) ./build/flare --network-id=coston --http-host 0.0.0.0 \
--bootstrap-ips="$(curl -m 10 -sX POST --data '{ "jsonrpc":"2.0", "id":1, "method":"info.getNodeIP" }' -H 'content-type:application/json;' https://coston.flare.network/ext/info | jq -r ".result.ip")" \
--bootstrap-ids="$(curl -m 10 -sX POST --data '{ "jsonrpc":"2.0", "id":1, "method":"info.getNodeID" }' -H 'content-type:application/json;' https://coston.flare.network/ext/info | jq -r ".result.nodeID")"


 (     (              (        
 )\ )  )\ )    (      )\ )   
(()/( (()/(    )\    (()/( (
 /(_)) /(_))((((_)(   /(_)))\
(_))_|(_))   )\ _ )\ (_)) ((_)
| |_  | |    (_)_\(_)| _ \| __|
| __| | |__   / _ \  |   /| _|
|_|   |____| /_/ \_\ |_|_\|___|

INFO [02-26|16:49:16.176] database/leveldb/db.go#121: leveldb config: {"blockCacheCapacity":12582912,"blockSize":0,"compactionExpandLimitFactor":0,"compactionGPOverlapsFactor":0,"compactionL0Trigger":0,"compactionSourceLimitFactor":0,"compactionTableSize":0,"compactionTableSizeMultiplier":0,"compactionTableSizeMultiplierPerLevel":null,"compactionTotalSize":0,"compactionTotalSizeMultiplier":0,"openFilesCacheCapacity":64,"writeBuffer":6291456,"filterBitsPerKey":10}
WARN [02-26|16:49:16.188] app/process/process.go#123: UPnP or NAT-PMP router attach failed, you may not be listening publicly. Please confirm the settings in your router
INFO [02-26|16:49:16.188] node/node.go#1112: node version is: flare/0.5.2
INFO [02-26|16:49:16.188] node/node.go#1113: node ID is: NodeID-G35PbtWjs2DsSihe2FhPAN5yREomkTxNY
INFO [02-26|16:49:16.188] node/node.go#1114: current database version: v1.4.5
INFO [02-26|16:49:16.188] node/node.go#488: initializing API server
INFO [02-26|16:49:16.188] api/server/server.go#82: API created with allowed origins: [*]
INFO [02-26|16:49:16.188] node/node.go#808: initializing metrics API
INFO [02-26|16:49:16.188] api/server/server.go#219: adding route /ext/metrics
INFO [02-26|16:49:16.188] node/node.go#774: initializing keystore
INFO [02-26|16:49:16.188] node/node.go#785: initializing keystore API
INFO [02-26|16:49:16.188] api/server/server.go#219: adding route /ext/keystore
INFO [02-26|16:49:16.188] node/node.go#766: initializing SharedMemory
INFO [02-26|16:49:16.189] node/node.go#182: this node's IP is set to: "172.31.25.163:9651"
INFO [02-26|16:49:16.190] node/node.go#929: initializing Health API
INFO [02-26|16:49:16.190] api/server/server.go#219: adding route /ext/health
INFO [02-26|16:49:16.190] api/server/server.go#219: adding route /ext/health/readiness
INFO [02-26|16:49:16.190] api/server/server.go#219: adding route /ext/health/health
INFO [02-26|16:49:16.190] api/server/server.go#219: adding route /ext/health/liveness
INFO [02-26|16:49:16.190] node/node.go#534: adding the default VM aliases
INFO [02-26|16:49:16.190] api/server/server.go#219: adding route /ext/vm/rWhpuQPF1kb72esV2momhMuTYGkEb1oL29pt2EBXWmSy4kxnT
INFO [02-26|16:49:16.190] api/server/server.go#219: adding route /ext/vm/jvYyfQTxGMJLuGWa55kdP2p2zSUYsQ5Raupu4TW34ZAUBAbtq
INFO [02-26|16:49:16.190] api/server/server.go#219: adding route /ext/vm/mgj786NP7uDwBCcq6YwThhaN8FLyybkCa4zBWTQbNgmK6k9A6/rpc
INFO [02-26|16:49:16.191] node/node.go#839: node config:
{"httpConfig":{"apiConfig":{"authConfig":{"apiRequireAuthToken":false},"indexerConfig":{"indexAPIEnabled":false,"indexAllowIncomplete":false},"ipcConfig":{"ipcAPIEnabled":false,"ipcPath":"/tmp","ipcDefaultChainIDs":null},"adminAPIEnabled":false,"infoAPIEnabled":true,"keystoreAPIEnabled":true,"metricsAPIEnabled":true,"healthAPIEnabled":true},"httpHost":"0.0.0.0","httpPort":9650,"httpsEnabled":false,"apiAllowedOrigins":["*"],"shutdownTimeout":10000000000,"shutdownWait":0},"ipConfig":{"ip":{"ip":"172.31.25.163","port":9651},"attemptedNATTraversal":true,"dynamicUpdateDuration":300000000000},"stakingConfig":{"uptimeRequirement":0.8,"minValidatorStake":1000000000,"maxValidatorStake":3000000000000000,"minDelegatorStake":1000000000,"minDelegationFee":20000,"minStakeDuration":86400000000000,"maxStakeDuration":31536000000000000,"rewardConfig":{"maxConsumptionRate":120000,"minConsumptionRate":100000,"mintingPeriod":31536000000000000,"supplyCap":720000000000000000},"enableStaking":true,"disabledStakingWeight":100,"stakingKeyPath":"/home/ec2-user/.flare/staking/staker.key","stakingCertPath":"/home/ec2-user/.flare/staking/staker.crt"},"txFeeConfig":{"txFee":1000000,"createAssetTxFee":10000000,"createSubnetTxFee":100000000,"createBlockchainTxFee":100000000},"bootstrapConfig":{"retryBootstrap":true,"retryBootstrapWarnFrequency":50,"bootstrapBeaconConnectionTimeout":60000000000,"bootstrapAncestorsMaxContainersSent":2000,"bootstrapAncestorsMaxContainersReceived":2000,"bootstrapMaxTimeGetAncestors":50000000,"bootstrapIDs":["HECDm3zTt9hRBFuz9BTp1iV2mMQPiejEF"],"bootstrapIPs":[{"ip":"34.159.134.207","port":9651}]},"databaseConfig":{"path":"/home/ec2-user/.flare/db/coston","name":"leveldb"},"avaxAssetID":"sMWvCcweHFoG4SE1SSVtiwosqezUW8tAA77t7BhAS7RUh6ms4","networkID":7,"enableAssertions":true,"enableCrypto":true,"healthCheckFreq":30000000000,"networkConfig":{"healthConfig":{"minConnectedPeers":1,"maxTimeSinceMsgReceived":60000000000,"maxTimeSinceMsgSent":60000000000,"maxPortionSendQueueBytesFull":0.9,"maxSendFailRate":0.9,"maxSendFailRateHalflife":10000000000},"peerListGossipConfig":{"peerListSize":20,"peerListGossipSize":50,"peerListStakerGossipFraction":2,"peerListGossipFreq":60000000000},"gossipConfig":{"gossipAcceptedFrontierSize":35,"gossipOnAcceptSize":20,"appGossipNonValidatorSize":0,"appGossipValidatorSize":10},"timeoutConfigs":{"getVersionTimeout":10000000000,"pingPongTimeout":30000000000,"readHandshakeTimeout":15000000000,"peerAliasTimeout":600000000000},"delayConfig":{"initialReconnectDelay":1000000000,"maxReconnectDelay":3600000000000},"throttlerConfig":{"inboundConnUpgradeThrottlerConfig":{"upgradeCooldown":10000000000,"maxRecentConnsUpgraded":2560},"inboundMsgThrottlerConfig":{"vdrAllocSize":33554432,"atLargeAllocSize":6291456,"nodeMaxAtLargeBytes":2097152,"bandwidthRefillRate":524288,"bandwidthMaxBurstRate":2097152,"maxProcessingMsgsPerNode":1024},"outboundMsgThrottlerConfig":{"vdrAllocSize":33554432,"atLargeAllocSize":6291456,"nodeMaxAtLargeBytes":2097152},"maxIncomingConnsPerSec":256},"dialerConfig":{"throttleRps":50,"connectionTimeout":30000000000},"namespace":"network","myNodeID":"G35PbtWjs2DsSihe2FhPAN5yREomkTxNY","myIP":{"ip":"172.31.25.163","port":9651},"networkID":7,"maxClockDifference":60000000000,"pingFrequency":22500000000,"allowPrivateIPs":true,"compressionEnabled":true,"whitelistedSubnets":[],"beacons":{},"validators":{},"uptimeMetricFreq":30000000000,"uptimeRequirement":0.8,"requireValidatorToConnect":false},"adaptiveTimeoutConfig":{"initialTimeout":5000000000,"minimumTimeout":2000000000,"maximumTimeout":10000000000,"timeoutCoefficient":2,"timeoutHalflife":300000000000},"benchlistConfig":{"threshold":10,"minimumFailingDuration":150000000000,"duration":900000000000,"maxPortion":0.08333333333333333,"peerSummaryEnabled":false},"profilerConfig":{"dir":"/home/ec2-user/.flare/profiles","enabled":false,"freq":900000000000,"maxNumFiles":5},"loggingConfig":{"rotationInterval":86400000000000,"fileSize":8388608,"rotationSize":7,"flushSize":1,"disableLogging":false,"disableDisplaying":false,"disableContextualDisplaying":false,"disableFlushOnWrite":false,"assertions":false,"logLevel":"INFO","displayLevel":"INFO","displayHighlight":"COLORS"},"pluginDir":"/home/ec2-user/flare/build/plugins","consensusParams":{"k":20,"alpha":15,"betaVirtuous":15,"betaRogue":20,"concurrentRepolls":4,"optimalProcessing":50,"maxOutstandingItems":1024,"maxItemProcessingTime":120000000000,"parents":5,"batchSize":30},"meterVMEnabled":true,"routerHealthConfig":{"maxDropRate":1,"maxDropRateHalflife":10000000000,"maxOutstandingRequests":1024,"maxOutstandingDuration":300000000000,"maxRunTimeRequests":10000000000},"consensusShutdownTimeout":5000000000,"consensusGossipFreq":10000000000,"whitelistedSubnets":[],"subnetConfigs":{},"resetProposerVMHeightIndex":false}
INFO [02-26|16:49:16.191] node/node.go#841: skipping admin API initialization because it has been disabled
INFO [02-26|16:49:16.191] node/node.go#889: initializing info API
INFO [02-26|16:49:16.191] api/server/server.go#219: adding route /ext/info
INFO [02-26|16:49:16.191] node/node.go#1051: skipping ipc API initialization because it has been disabled
INFO [02-26|16:49:16.191] node/node.go#1064: initializing chain aliases
INFO [02-26|16:49:16.191] node/node.go#1082: initializing API aliases
INFO [02-26|16:49:16.192] node/node.go#864: skipping profiler initialization because it has been disabled
INFO [02-26|16:49:16.192] node/node.go#474: initializing chains
INFO [02-26|16:49:16.192] chains/manager.go#253: creating chain:
    ID: 11111111111111111111111111111111LpoYY
    VMID:rWhpuQPF1kb72esV2momhMuTYGkEb1oL29pt2EBXWmSy4kxnT
INFO [02-26|16:49:16.193] <P Chain> vms/platformvm/vm.go#202: initializing last accepted block as 2RQJxpDt3t2MnEFZsBKWSSy6GUCAJXzWxsLqvAHkjk4BrPPyKt
INFO [02-26|16:49:16.194] <P Chain> snow/engine/snowman/transitive.go#67: initializing consensus engine
INFO [02-26|16:49:16.194] <P Chain> snow/engine/snowman/bootstrap/bootstrapper.go#222: Starting bootstrap...
INFO [02-26|16:49:16.194] api/server/server.go#114: HTTP API server listening on "0.0.0.0:9650"
INFO [02-26|16:49:16.194] api/server/server.go#203: adding route /ext/bc/11111111111111111111111111111111LpoYY
INFO [02-26|16:49:16.282] <P Chain> snow/engine/common/bootstrapper.go#235: Bootstrapping started syncing with 1 vertices in the accepted frontier
INFO [02-26|16:49:16.282] <P Chain> snow/engine/snowman/bootstrap/bootstrapper.go#424: bootstrapping fetched 0 blocks. Executing state transitions...
INFO [02-26|16:49:16.282] <P Chain> snow/engine/common/queue/jobs.go#181: executed 0 operations
INFO [02-26|16:49:16.282] chains/manager.go#253: creating chain:
    ID: 2wcJd3HZL4EAoQDfGhyeHGJU55wizganSzD9EvdDLJX3B5u5Be
    VMID:mgj786NP7uDwBCcq6YwThhaN8FLyybkCa4zBWTQbNgmK6k9A6
INFO [02-26|16:49:16.283] Initializing Coreth VM                   Version=v0.3.1 Config="{\"snowman-api-enabled\":false,\"coreth-admin-api-enabled\":false,\"coreth-admin-api-dir\":\"\",\"eth-apis\":[\"public-eth\",\"public-eth-filter\",\"net\",\"web3\",\"internal-public-eth\",\"internal-public-blockchain\",\"internal-public-transaction-pool\"],\"continuous-profiler-dir\":\"\",\"continuous-profiler-frequency\":{\"Duration\":900000000000},\"continuous-profiler-max-files\":5,\"rpc-gas-cap\":50000000,\"rpc-tx-fee-cap\":100,\"preimages-enabled\":false,\"pruning-enabled\":false,\"snapshot-async\":true,\"snapshot-verification-enabled\":false,\"metrics-enabled\":true,\"metrics-expensive-enabled\":false,\"local-txs-enabled\":false,\"api-max-duration\":{\"Duration\":0},\"ws-cpu-refill-rate\":{\"Duration\":0},\"ws-cpu-max-stored\":{\"Duration\":0},\"api-max-blocks-per-request\":0,\"allow-unfinalized-queries\":false,\"allow-unprotected-txs\":false,\"keystore-directory\":\"\",\"keystore-external-signer\":\"\",\"keystore-insecure-unlock-allowed\":false,\"remote-tx-gossip-only-enabled\":false,\"tx-regossip-frequency\":{\"Duration\":60000000000},\"tx-regossip-max-size\":15,\"log-level\":\"debug\",\"offline-pruning-enabled\":false,\"offline-pruning-bloom-filter-size\":512,\"offline-pruning-data-directory\":\"\",\"max-outbound-active-requests\":8}"
DEBUG[02-26|16:49:16.285] FS scan times                            list="17.436µs" set=377ns diff="1.001µs"
INFO [02-26|16:49:16.285] Allocated trie memory caches             clean=228.00MiB dirty=256.00MiB
INFO [02-26|16:49:16.287] Persisted trie from memory database      nodes=17 size=2.78KiB time="63.056µs" gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [02-26|16:49:16.287] Initialised chain configuration          config="{ChainID: 16 Homestead: 0 DAO: 0 DAOSupport: true EIP150: 0 EIP155: 0 EIP158: 0 Byzantium: 0 Constantinople: 0 Petersburg: 0 Istanbul: 0, Muir Glacier: 0, Apricot Phase 1: 946684800, Apricot Phase 2: 946684800, Apricot Phase 3: 1645797600, Apricot Phase 4: 1645801200, Apricot Phase 5: 1645804800, Engine: Dummy Consensus Engine}"
INFO [02-26|16:49:16.287] Initialising Ethereum protocol           network=16 dbversion=8
INFO [02-26|16:49:16.288] Loaded most recent local header          number=59596 hash=03e3d0..dc0f17 age=4m16s
INFO [02-26|16:49:16.288] Loaded most recent local full block      number=59596 hash=03e3d0..dc0f17 age=4m16s
INFO [02-26|16:49:16.288] Initializing snapshots                   async=true
DEBUG[02-26|16:49:16.289] Reinjecting stale transactions           count=0
INFO [02-26|16:49:16.289] initializing atomic trie                 c=atomicTrie lastAcceptedBlockNumber=59596
INFO [02-26|16:49:16.289] committed atomic trie                    c=atomicTrie hash=0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421 height=57344
DEBUG[02-26|16:49:16.289] Persisted trie from memory database      nodes=0  size=0.00B   time="4.398µs"  gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [02-26|16:49:16.289] finished initializing atomic trie        c=atomicTrie lastAcceptedBlockNumber=59596 preCommitEntriesIndexed=0 postCommitEntriesIndexed=0 time="207.908µs"
INFO [02-26|16:49:16.289] Transaction pool price threshold updated price=470,000,000,000
INFO [02-26|16:49:16.289] Transaction pool price threshold updated price=225,000,000,000
INFO [02-26|16:49:16.289] Transaction pool price threshold updated price=0
INFO [02-26|16:49:16.289] lastAccepted = 0x03e3d0a1b2615d0be50bf89cfb124580a777c8fec63aa525c9eb97afb3dc0f17 
INFO [02-26|16:49:16.290] <C Chain> snow/engine/snowman/transitive.go#67: initializing consensus engine
INFO [02-26|16:49:16.290] <C Chain> vms/proposervm/vm.go#214: block height indexing is already complete
INFO [02-26|16:49:16.291] Enabled APIs: public-eth, public-eth-filter, net, web3, internal-public-eth, internal-public-blockchain, internal-public-transaction-pool, avax 
DEBUG[02-26|16:49:16.291] Allowed origin(s) for WS RPC interface [*] 
INFO [02-26|16:49:16.291] api/server/server.go#203: adding route /ext/bc/2wcJd3HZL4EAoQDfGhyeHGJU55wizganSzD9EvdDLJX3B5u5Be/ws
INFO [02-26|16:49:16.291] <C Chain> snow/engine/snowman/bootstrap/bootstrapper.go#222: Starting bootstrap...
INFO [02-26|16:49:16.291] api/server/server.go#203: adding route /ext/bc/2wcJd3HZL4EAoQDfGhyeHGJU55wizganSzD9EvdDLJX3B5u5Be/avax
INFO [02-26|16:49:16.291] chains/manager.go#253: creating chain:
    ID: 8S5vg8ycMqULMMq2CzrRh3qqbFWjs6a35H8UwNAaS83v9Ynxa
    VMID:jvYyfQTxGMJLuGWa55kdP2p2zSUYsQ5Raupu4TW34ZAUBAbtq
INFO [02-26|16:49:16.291] api/server/server.go#203: adding route /ext/bc/2wcJd3HZL4EAoQDfGhyeHGJU55wizganSzD9EvdDLJX3B5u5Be/rpc
DEBUG[02-26|16:49:16.291] adding new peer                          nodeID=G35PbtWjs2DsSihe2FhPAN5yREomkTxNY
DEBUG[02-26|16:49:16.291] skipping registering self as peer 
DEBUG[02-26|16:49:16.291] adding new peer                          nodeID=HECDm3zTt9hRBFuz9BTp1iV2mMQPiejEF
INFO [02-26|16:49:16.292] <X Chain> vms/avm/vm.go#445: Fee payments are using Asset with Alias: AVAX, AssetID: sMWvCcweHFoG4SE1SSVtiwosqezUW8tAA77t7BhAS7RUh6ms4
INFO [02-26|16:49:16.292] <X Chain> vms/avm/vm.go#229: address transaction indexing is disabled
INFO [02-26|16:49:16.292] <X Chain> snow/engine/avalanche/transitive.go#71: initializing consensus engine
INFO [02-26|16:49:16.292] <X Chain> snow/engine/avalanche/bootstrap/bootstrapper.go#269: Starting bootstrap...
INFO [02-26|16:49:16.292] <P Chain> snow/engine/snowman/bootstrap/bootstrapper.go#463: waiting for the remaining chains in this subnet to finish syncing
INFO [02-26|16:49:16.293] api/server/server.go#203: adding route /ext/bc/8S5vg8ycMqULMMq2CzrRh3qqbFWjs6a35H8UwNAaS83v9Ynxa/wallet
INFO [02-26|16:49:16.293] api/server/server.go#203: adding route /ext/bc/8S5vg8ycMqULMMq2CzrRh3qqbFWjs6a35H8UwNAaS83v9Ynxa/events
INFO [02-26|16:49:16.293] api/server/server.go#203: adding route /ext/bc/8S5vg8ycMqULMMq2CzrRh3qqbFWjs6a35H8UwNAaS83v9Ynxa
DEBUG[02-26|16:49:16.330] adding new peer                          nodeID=FPAwqHjs8Mw8Cuki5bkm3vSVisZr8t2Lu
DEBUG[02-26|16:49:16.355] adding new peer                          nodeID=5dDZXn99LCkDoEi6t9gTitZuQmhokxQTc
DEBUG[02-26|16:49:16.380] adding new peer                          nodeID=AQghDJTU3zuQj73itPtfTZz6CxsTQVD3R
DEBUG[02-26|16:49:16.384] adding new peer                          nodeID=EkH8wyEshzEQBToAdR7Fexxcj9rrmEEHZ
DEBUG[02-26|16:49:16.432] adding new peer                          nodeID=HaZ4HpanjndqSuN252chFsTysmdND5meA
DEBUG[02-26|16:49:19.287] FS scan times                            list="59.429µs" set=747ns diff="1.148µs"
INFO [02-26|16:49:19.750] <X Chain> snow/engine/common/bootstrapper.go#235: Bootstrapping started syncing with 0 vertices in the accepted frontier
INFO [02-26|16:49:19.750] <X Chain> snow/engine/avalanche/bootstrap/bootstrapper.go#483: bootstrapping fetched 0 vertices. Executing transaction state transitions...
INFO [02-26|16:49:19.750] <C Chain> snow/engine/common/bootstrapper.go#235: Bootstrapping started syncing with 1 vertices in the accepted frontier
INFO [02-26|16:49:19.750] <X Chain> snow/engine/common/queue/jobs.go#181: executed 0 operations
INFO [02-26|16:49:19.750] <X Chain> snow/engine/avalanche/bootstrap/bootstrapper.go#494: executing vertex state transitions...
INFO [02-26|16:49:19.750] <X Chain> snow/engine/common/queue/jobs.go#181: executed 0 operations
INFO [02-26|16:49:19.750] <X Chain> snow/engine/avalanche/bootstrap/bootstrapper.go#522: waiting for the remaining chains in this subnet to finish syncing
INFO [02-26|16:49:20.013] <C Chain> snow/engine/snowman/bootstrap/bootstrapper.go#424: bootstrapping fetched 12 blocks. Executing state transitions...
DEBUG[02-26|16:49:20.054] Persisted trie from memory database      nodes=268 size=92.52KiB time=2.901146ms  gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=-1148.00B
DEBUG[02-26|16:49:20.054] Inserted new block                       number=59597 hash=eed257..a143ea parentHash=03e3d0..dc0f17 uncles=0 txs=1 gas=312,216 elapsed=40.894ms root=f921d8..967ec1 baseFeePerGas=25,000,000,000 blockGasCost=0
DEBUG[02-26|16:49:20.054] Reinjecting stale transactions           count=0
DEBUG[02-26|16:49:20.054] Accepting block eed257bb07d457172bb59156a726392aa4f3db01857a1a5442188baf1ba143ea (2pBNxRwiK4Jk16Brm9y2ZByjepbcvestyQBon3mwddwCau8JAv) at height 59597 
DEBUG[02-26|16:49:20.054] Journalled generator progress            progress=done
DEBUG[02-26|16:49:20.055] Journalled disk layer                    root=f921d8..967ec1 complete=true
DEBUG[02-26|16:49:20.055] Flattened snapshot tree                  blockHash=eed257..a143ea root=f921d8..967ec1 size=1        elapsed="447.217µs"
DEBUG[02-26|16:49:20.060] Persisted trie from memory database      nodes=79  size=26.53KiB time="747.851µs" gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=-1804.00B

This seems to only happen when the remote node is not a validator, i.e. we are bootstrapping through a non-validator beacon by explicitly setting the --bootstrap-ids and --bootstrap-ips flags.

Port forwarding for Cartoon network.

Which ports need to be configured on the router for correct operation? Swears at startup:
- app/process/process.go#133: UPnP or NAT-PMP router connection error, maybe you are not listening publicly. Please confirm your router settings
- Failed to connect to bootstrap nodes. Node shutdown...

Genesis block hard fork timestamps are ignored

A lot of code on the Avalanche / Flare side of things (meaning not the Coreth side) ignores the hard fork timestamps from the genesis block, and only uses the hard-coded timestamps. This means that staging / local testing of hard forks is impossible for code on the Flare side.

Mocking Bird

if that mocking bird dont Sing. Then Daddy is going to buy you a Dimond Ring!

Support a new transaction type on the state-connector

background

As part of the fAsset system it is required to prove that any outgoing transaction happened from a source address.

as the system is defined. the Agent can't send outgoing payments from any address on the bridged chain, without first declaring those transactions.
if the Agent does send an outgoing payment it will be penalized by liquidating its position.

details

  • Support a generic transaction type that proves a source address sent out some funds.
  • When a challenger sends such prove it will trigger a liquidation of the Agent

Important note

The generic transaction type must only support payment types that are not supported by setPaymentFinality API.
So if a valid payment was sent. it must only be "proven" on the state connector through setPaymentFinality API
and should be rejected when sent to the API supporting proving a generic transaction

Review changes related to validator set

At the moment, we are hijacking the validator manager's update function to return a static validator set. We should update the code so that we bootstrap using a static validator set from the genesis information instead, and then simply disable the updating of the set subsequently.

This would allow us to re-enable the genesis bootstrapping testing of validators, and would integrate the Flare logic more cleanly into Avalanche.

Apricot Phase 3 hard fork is (partially) disabled on Songbird network

Through my investigation into why the new code base wasn't properly syncing with the Songbird network, I discovered that the Apricot Phase 3 hard fork has not been activated on the Songbird network, and will indeed never activate because it is disabled.

For past hard forks, their timing was defined in the configuration of the C-Chain genesis file, see: https://gitlab.com/flarenetwork/flare/-/blob/master/src/genesis/genesis_songbird.go#L23

"config": {
	"chainId": 19,
	"homesteadBlock": 0,
	"daoForkBlock": 0,
	"daoForkSupport": true,
	"eip150Block": 0,
	"eip150Hash": "0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0",
	"eip155Block": 0,
	"eip158Block": 0,
	"byzantiumBlock": 0,
	"constantinopleBlock": 0,
	"petersburgBlock": 0,
	"istanbulBlock": 0,
	"muirGlacierBlock": 0,
	"apricotPhase1BlockTimestamp": 0,
	"apricotPhase2BlockTimestamp": 0
}

A timestamp of zero means that the fork is enabled from the start of the network.

However, the genesis file can not be modified after the initial network start, so newer forks were not included in the configuration of the C-Chain genesis file. In fact, Avalanche itself doesn't include any Apricot forks in the genesis file.

Instead, they keep a separate instance of hard-coded fork configurations for each network in the Coreth repository, see: https://github.com/ava-labs/coreth/blob/master/params/config.go#L90

// AvalancheFujiChainConfig is the configuration for the Fuji Test Network
AvalancheFujiChainConfig = &ChainConfig{
	ChainID:                     AvalancheFujiChainID,
	HomesteadBlock:              big.NewInt(0),
	DAOForkBlock:                big.NewInt(0),
	DAOForkSupport:              true,
	EIP150Block:                 big.NewInt(0),
	EIP150Hash:                  common.HexToHash("0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0"),
	EIP155Block:                 big.NewInt(0),
	EIP158Block:                 big.NewInt(0),
	ByzantiumBlock:              big.NewInt(0),
	ConstantinopleBlock:         big.NewInt(0),
	PetersburgBlock:             big.NewInt(0),
	IstanbulBlock:               big.NewInt(0),
	MuirGlacierBlock:            big.NewInt(0),
	ApricotPhase1BlockTimestamp: big.NewInt(time.Date(2021, time.March, 26, 14, 0, 0, 0, time.UTC).Unix()),
	ApricotPhase2BlockTimestamp: big.NewInt(time.Date(2021, time.May, 5, 14, 0, 0, 0, time.UTC).Unix()),
	ApricotPhase3BlockTimestamp: big.NewInt(time.Date(2021, time.August, 16, 19, 0, 0, 0, time.UTC).Unix()),
	ApricotPhase4BlockTimestamp: big.NewInt(time.Date(2021, time.September, 16, 21, 0, 0, 0, time.UTC).Unix()),
	ApricotPhase5BlockTimestamp: big.NewInt(time.Date(2021, time.November, 24, 15, 0, 0, 0, time.UTC).Unix()),
}

This chain configuration overwrites the configuration in the C-Chain genesis block if the network has one of the hard-coded chain IDs, see: https://github.com/ava-labs/coreth/blob/master/plugin/evm/vm.go#L300

// Set the chain config for mainnet/fuji chain IDs
switch {
case g.Config.ChainID.Cmp(params.AvalancheMainnetChainID) == 0:
	g.Config = params.AvalancheMainnetChainConfig
	phase0BlockValidator.extDataHashes = mainnetExtDataHashes
case g.Config.ChainID.Cmp(params.AvalancheFujiChainID) == 0:
	g.Config = params.AvalancheFujiChainConfig
	phase0BlockValidator.extDataHashes = fujiExtDataHashes
case g.Config.ChainID.Cmp(params.AvalancheLocalChainID) == 0:
	g.Config = params.AvalancheLocalChainConfig
}

However, the chain IDs are also redundantly defined in the Coreth repository, see: https://github.com/ava-labs/coreth/blob/master/params/config.go#L43

// Avalanche ChainIDs
var (
	// AvalancheMainnetChainID ...
	AvalancheMainnetChainID = big.NewInt(43114)
	// AvalancheFujiChainID ...
	AvalancheFujiChainID = big.NewInt(43113)
	// AvalancheLocalChainID ...
	AvalancheLocalChainID = big.NewInt(43112)
)

Unfortunately, in our previous repository, we did not update the chain ID in the Coreth repository. You would think that this would decode the value of the fork timestamp as zero, and thus enable the hard fork by default, but not so, see: https://github.com/ava-labs/coreth/blob/master/params/config.go#L158

// Apricot Phase 3 introduces dynamic fees and a modified version of the London Hard Fork from Ethereum (nil = no fork, 0 = already activated)
ApricotPhase3BlockTimestamp *big.Int `json:"apricotPhase3BlockTimestamp,omitempty"`

Pointers default to decoding as nil with the default Go JSON decoder, which disabled the hard fork. Hence, we are running on Apricot Phase 2 on the EVM of the Songbird network currently.

However, Apricot Phase 3 is activated from the point of view of the Avalanche repository, which is defined here: https://github.com/ava-labs/avalanchego/blob/master/version/constants.go#L48

ApricotPhase3Times = map[uint32]time.Time{
	constants.MainnetID: time.Date(2021, time.August, 24, 14, 0, 0, 0, time.UTC),
	constants.FujiID:    time.Date(2021, time.August, 16, 19, 0, 0, 0, time.UTC),
}
ApricotPhase3DefaultTime = time.Date(2020, time.December, 5, 5, 0, 0, 0, time.UTC)

Because on the Avalanche repository, the hard-coded fork configurations use the network IDs and are actually correctly defined, see: https://github.com/ava-labs/avalanchego/blob/master/utils/constants/network_ids.go#L20

const (
	MainnetID uint32 = 1
	CascadeID uint32 = 2
	DenaliID  uint32 = 3
	EverestID uint32 = 4
	FujiID    uint32 = 5
)

My recommendation would be to plan for a full Apricot Phase 3 rollout as soon as possible.

Missing state-sync flag

--state-sync-enabled=true
--state-sync-skip-resume=false
--state-sync-min-blocks=100000
--state-sync-ids=
couldn't configure flags: unknown flag: --state-sync-enabled

I don't want to fetch the whole block from September just the recent ones.. Why state sync isn't working? Not added yet?

Review health-check related changes

We removed some code that adds the set of validators to a monitoring for health checks. This allows our nodes to be healthy, even when using a customized static set of validators. However, we should check if we can re-enable the health checks and have them pass on top of the static list instead.

Remove all P-chain and X-chain related APIs

In order to harden the node for the main network deployment, we should remove all APIs that are related to the P-Chain and the X-Chain. This will avoid that anybody could find an exploit to mess with the network by using these two chains, which will be completely irrelevant.

After removing all of the APIs, we might also be able to remove a lot of the underlying code that exists to serve these APIs.

Add multi-chain cross-mining

In Flare, blocks are created by underlying chain validators, with the set of underlying chains being determined by the available FTSO assets. Each leader epoch, the FTSO data providers vote on the share of block generation each registered Flare leader has on his respective chain. This system is built in Solidity, so the information is held in a smart contract.

That being said, the Go portion of the system has to read the leaders from a smart contract and use them when sampling leaders in Avalanche consensus. This is complicated by the fact that the leader selection logic is as far removed from the EVM layer as possible, happening on the level of the Avalanche code base, while the EVM is executed deeply nested within in a binary plugin.

In order to expose the leaders, as found in the smart contract state, to the leader selection logic, we need to take the following steps:

  1. Modify the windower of the sampling logic to take a hash of the parent block, so that we can disambiguate between blocks at the same height. This is not relevant when validators are held in the P-Chain state. In our case, the validators are held in the C-Chain state, so we need to handle ambiguous block heights, where validator sets might differ between one branch and another branch of the blockchain.

  2. Remove the P-Chain height from the windower parameters, and instead use the block ID (which corresponds to the block hash at the EVM level) to retrieve the set of validators. In order to do so, we need to inject an additional component into the windower upon initialization, which wraps around a plugin API, which takes the block hash as a parameter, and returns the weighted list of validators at this block hash.

  3. Create a plugin client and a plugin server using the Hashicorp GRPC plugin system, in its new namespace, which will be injected into this new component. It should exist in parallel to the VM namespace used by the Avalanche code base, so that we don't need to modify any of the existing interfaces.

  4. On the Coreth side, where the GRPC plugin is initialized, we should create a secondary wrapper, which takes the VM pointer as a dependency, and uses it to extract the blockchain. This in turn allows us to create the necessary EVM context to execute our contract call to read the leaders when given a block hash.

gas price is 0

$ curl --location --request POST 'http://127.0.0.1:9650/ext/bc/C/rpc' --header 'Content-Type: application/json' --data-raw '{
"id": "1",
"jsonrpc": "2.0",
"method": "eth_gasPrice",
"params": []
}'
{"jsonrpc":"2.0","id":"1","result":"0x0"}

Node version: 0.5.1

Review allocation-related changes

Our genesis blocks don't have any allocations, as we only use the C-Chain, for which we do initial supply in the genesis block. This broke a lot of tests from the Avalanche repository. We should revisit how we initialize, and review that everything that should be tested still gets tested.

Jadid

والا من که اصلا سر در نمیارم که این چی هست و برای چی هست

Air Drop Theft

Never recivied my Flare Spark tokens from Coinbase Wallet or Atomic Wallet.

Node freezes on db.go

Hi guys!
I have just updated to the version 0.6.4-api running the node from the official Docker image.
Configuration parameters are in the log below. But the node freezes in the INFO message from the db.go:

+ '[' 0 = 1 ']'
+ '[' 0 = 1 ']'
+ ./build/flare --http-host=0.0.0.0 --http-port=9650 --staking-port=9651 --public-ip=<my_ip_here> --db-dir=/flare/db/songbird/node1 --db-type=leveldb --bootstrap-ips= --bootstrap-ids= --chain-config-dir=/flare/config/songbird/node1 --log-dir=/flare/logs/songbird/node1 --log-level=debug --network-id=songbird
 (     (              (
 )\ )  )\ )    (      )\ )
(()/( (()/(    )\    (()/( (
 /(_)) /(_))((((_)(   /(_)))\
(_))_|(_))   )\ _ )\ (_)) ((_)
| |_  | |    (_)_\(_)| _ \| __|
| __| | |__   / _ \  |   /| _|
|_|   |____| /_/ \_\ |_|_\|___|
INFO [10-13|15:02:36.698] database/leveldb/db.go#121: leveldb config: {"blockCacheCapacity":12582912,"blockSize":0,"compactionExpandLimitFactor":0,"compactionGPOverlapsFactor":0,"compactionL0Trigger":0,"compactionSourceLimitFactor":0,"compactionTableSize":0,"compactionTableSizeMultiplier":0,"compactionTableSizeMultiplierPerLevel":null,"compactionTotalSize":0,"compactionTotalSizeMultiplier":0,"openFilesCacheCapacity":64,"writeBuffer":6291456,"filterBitsPerKey":10}

And nothing happens afterwards. What is wrong?

Thank you in advance!

Migrate to Flare version on network handshake

The currently deployed Songbird nodes will drop any peer that does not have the same application name (avalanche), or differs in major version (v1) or is before the minimum compatible version (v1.5.0, v1.6.0 soon) of the protocol.

However, with our migration to our own full repository, we are introducing our own versioning, currently at v0.2.2. In order to migrate to our own versioning cleanly, without needing to restart the whole network, we need to follow a three step process:

  1. Upgrade all nodes to a version that supports both Avalanche and Flare version exchange, but still sends the Avalanche version information. Doing so makes sure that the nodes are not dropped from the network when upgraded, because they still send the Avalanche version information accepted by the old nodes. However, it means that the new nodes will also accept nodes sending Flare version information without dropping them.
  2. Upgrade all nodes to a version that supports both Avalanche and Flare version exchange, and sends the Flare version information. As the previous upgrade enabled all nodes to accept Flare version information, we can now transition all nodes to a version that actually sends the Flare version information.
  3. Upgrade all nodes to a version that supports Flare version exchange, and rejects Avalanche version exchange. This means that all nodes at a version sending Avalanche version information, like the old code base, or nodes from point 1 of the migration, will be dropped.

Version v0.2.2 already implements step one of this transition plan.

New fields on setPaymentFinality API on the state-connector

The State connector supports setPaymentFinality API
a few additional fields are required to enable the state connector to support all operations with the fAsset system:

  • gas spent: how much gas (tokens) was spent on this transaction.
  • source address: the source address of the transaction

Fully disable P-Chain and X-Chain

In theory, we should have no need to run the P-Chain and the X-Chain anymore. Previously, the P-Chain was needed to get validators for the sub-networks. However, this is now done by the EVM (C-Chain). This means we should, in theory, be able to fully rip out the P-Chain and X-Chain code, and simply run the EVM alone.

Remove validator-related code from P-Chain

There is a lot of code that deals with getting validators from the P-Chain, which should all no longer be needed. We can remove a huge chunk of code that is not in use anymore on our version of the codebase.

Bump to latest upstream version (1.7.9)

After upgrading Coreth to the latest upstream version (0.8.8-rc.0), we can also bump this repo. Since the Coreth dependency didn't change between 1.7.8 and 1.7.9 that was released today, we can just go to 1.7.9 right away.

Recommend Projects

  • React photo React

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

  • Vue.js photo Vue.js

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

  • Typescript photo Typescript

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

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

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

Recommend Topics

  • javascript

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

  • web

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

  • server

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

  • Machine learning

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

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

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

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.