本文整理汇总了Golang中github.com/dedis/onet/log.ErrFatal函数的典型用法代码示例。如果您正苦于以下问题:Golang ErrFatal函数的具体用法?Golang ErrFatal怎么用?Golang ErrFatal使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ErrFatal函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: TestIdentity_SaveToStream
func TestIdentity_SaveToStream(t *testing.T) {
l := onet.NewTCPTest()
_, el, _ := l.GenTree(5, true)
defer l.CloseAll()
id := NewIdentity(el, 50, "one1")
tmpfile, err := ioutil.TempFile("", "example")
log.ErrFatal(err)
defer os.Remove(tmpfile.Name())
log.ErrFatal(id.SaveToStream(tmpfile))
tmpfile.Close()
tmpfile, err = os.Open(tmpfile.Name())
log.ErrFatal(err)
id2, err := NewIdentityFromStream(tmpfile)
assert.NotNil(t, id2)
log.ErrFatal(err)
tmpfile.Close()
if id.Config.Threshold != id2.Config.Threshold {
t.Fatal("Loaded threshold is not the same")
}
p, p2 := id.Config.Device["one1"].Point, id2.Config.Device["one1"].Point
if !p.Equal(p2) {
t.Fatal("Public keys are not the same")
}
if id.Config.Data["one1"] != id2.Config.Data["one1"] {
t.Fatal("Owners are not the same", id.Config.Data, id2.Config.Data)
}
}
开发者ID:dedis,项目名称:cothority,代码行数:28,代码来源:api_test.go
示例2: TestService_MultiLevel
func TestService_MultiLevel(t *testing.T) {
local := onet.NewLocalTest()
defer local.CloseAll()
_, el, genService := local.MakeHELS(3, skipchainSID)
service := genService.(*Service)
for base := 1; base <= 3; base++ {
for height := 1; height <= 3; height++ {
if base == 1 && height > 1 {
break
}
sbRoot, err := makeGenesisRosterArgs(service, el, nil, VerifyNone,
base, height)
log.ErrFatal(err)
latest := sbRoot
log.Lvl1("Adding blocks for", base, height)
for sbi := 1; sbi < 10; sbi++ {
sb := NewSkipBlock()
sb.Roster = el
psbr, err := service.ProposeSkipBlock(&ProposeSkipBlock{latest.Hash, sb})
log.ErrFatal(err)
latest = psbr.(*ProposedSkipBlockReply).Latest
}
log.ErrFatal(checkMLForwardBackward(service, sbRoot, base, height))
log.ErrFatal(checkMLUpdate(service, sbRoot, latest, base, height))
}
}
// Setting up two chains and linking one to the other
}
开发者ID:dedis,项目名称:cothority,代码行数:30,代码来源:skipchain_test.go
示例3: followAdd
func followAdd(c *cli.Context) error {
if c.NArg() < 2 {
log.Fatal("Please give a group-definition, an ID, and optionally a service-name of the skipchain to follow")
}
cfg, _ := loadConfig(c)
group := getGroup(c)
idBytes, err := hex.DecodeString(c.Args().Get(1))
log.ErrFatal(err)
id := identity.ID(idBytes)
newID, err := identity.NewIdentityFromCothority(group.Roster, id)
log.ErrFatal(err)
if c.NArg() == 3 {
newID.DeviceName = c.Args().Get(2)
} else {
var err error
newID.DeviceName, err = os.Hostname()
log.ErrFatal(err)
log.Info("Using", newID.DeviceName, "as the device-name.")
}
cfg.Follow = append(cfg.Follow, newID)
cfg.writeAuthorizedKeys(c)
// Identity needs to exist, else saving/loading will fail. For
// followers it doesn't matter if the identity will be overwritten,
// as it is not used.
cfg.Identity = newID
return cfg.saveConfig(c)
}
开发者ID:dedis,项目名称:cothority,代码行数:27,代码来源:cisc.go
示例4: TestService_Verification
func TestService_Verification(t *testing.T) {
local := onet.NewLocalTest()
defer local.CloseAll()
sbLength := 4
_, el, genService := local.MakeHELS(sbLength, skipchainSID)
service := genService.(*Service)
elRoot := onet.NewRoster(el.List[0:3])
sbRoot, err := makeGenesisRoster(service, elRoot)
log.ErrFatal(err)
log.Lvl1("Creating non-conforming skipBlock")
sb := NewSkipBlock()
sb.Roster = el
sb.MaximumHeight = 1
sb.BaseHeight = 1
sb.ParentBlockID = sbRoot.Hash
sb.VerifierID = VerifyShard
_, err = service.ProposeSkipBlock(&ProposeSkipBlock{nil, sb})
require.NotNil(t, err, "Shouldn't accept a non-confoirming skipblock")
log.Lvl1("Creating skipblock with same Roster as root")
sbInter, err := makeGenesisRosterArgs(service, elRoot, sbRoot.Hash, VerifyShard, 1, 1)
log.ErrFatal(err)
log.Lvl1("Creating skipblock with sub-Roster from root")
elSub := onet.NewRoster(el.List[0:2])
sbInter, err = makeGenesisRosterArgs(service, elSub, sbRoot.Hash, VerifyShard, 1, 1)
log.ErrFatal(err)
scsb := &SetChildrenSkipBlock{sbRoot.Hash, sbInter.Hash}
service.SetChildrenSkipBlock(scsb)
}
开发者ID:dedis,项目名称:cothority,代码行数:31,代码来源:skipchain_test.go
示例5: TestServiceStatus
func TestServiceStatus(t *testing.T) {
local := onet.NewTCPTest()
// generate 5 hosts, they don't connect, they process messages, and they
// don't register the tree or entitylist
_, el, tr := local.GenTree(5, false)
defer local.CloseAll()
// Send a request to the service
client := NewTestClient(local)
log.Lvl1("Sending request to service...")
stat, cerr := client.Request(el.List[0])
log.Lvl1(el.List[0])
log.ErrFatal(cerr)
log.Lvl1(stat)
assert.NotEmpty(t, stat.Msg["Status"].Field["Available_Services"])
pi, err := local.CreateProtocol("ExampleChannels", tr)
if err != nil {
t.Fatal("Couldn't start protocol:", err)
}
go pi.Start()
<-pi.(*channels.ProtocolExampleChannels).ChildCount
stat, cerr = client.Request(el.List[0])
log.ErrFatal(cerr)
log.Lvl1(stat)
assert.NotEmpty(t, stat.Msg["Status"].Field["Available_Services"])
}
开发者ID:dedis,项目名称:cothority,代码行数:26,代码来源:status_test.go
示例6: TestClient_CreateData
func TestClient_CreateData(t *testing.T) {
l := onet.NewTCPTest()
_, el, _ := l.GenTree(2, true)
defer l.CloseAll()
c := NewTestClient(l)
_, inter, cerr := c.CreateRootControl(el, el, 1, 1, 1, VerifyNone)
log.ErrFatal(cerr)
td := &testData{1, "data-sc"}
inter, data, cerr := c.CreateData(inter, 1, 1, VerifyNone, td)
log.ErrFatal(cerr)
if err := data.VerifySignatures(); err != nil {
t.Fatal("Couldn't verify data-signature:", err)
}
if !bytes.Equal(data.ParentBlockID, inter.Hash) {
t.Fatal("Data-chain doesn't point to intermediate-chain")
}
if !bytes.Equal(inter.ChildSL.Hash, data.Hash) {
t.Fatal("Intermediate chain doesn't point to data-chain")
}
_, td1, err := network.UnmarshalRegisteredType(data.Data, network.DefaultConstructors(network.Suite))
log.ErrFatal(err)
if *td != td1.(testData) {
t.Fatal("Stored data is not the same as initial data")
}
}
开发者ID:dedis,项目名称:cothority,代码行数:26,代码来源:api_test.go
示例7: TestIdentity_ConfigNewPropose
func TestIdentity_ConfigNewPropose(t *testing.T) {
l := onet.NewTCPTest()
hosts, el, _ := l.GenTree(2, true)
services := l.GetServices(hosts, identityService)
defer l.CloseAll()
c1 := NewTestIdentity(el, 50, "one", l)
log.ErrFatal(c1.CreateIdentity())
conf2 := c1.Config.Copy()
kp2 := config.NewKeyPair(network.Suite)
conf2.Device["two"] = &Device{kp2.Public}
log.ErrFatal(c1.ProposeSend(conf2))
for _, s := range services {
is := s.(*Service)
id1 := is.getIdentityStorage(c1.ID)
id1.Lock()
if id1 == nil {
t.Fatal("Didn't find")
}
assert.NotNil(t, id1.Proposed)
if len(id1.Proposed.Device) != 2 {
t.Fatal("The proposed config should have 2 entries now")
}
id1.Unlock()
}
}
开发者ID:dedis,项目名称:cothority,代码行数:28,代码来源:api_test.go
示例8: TestClient_ProposeData
func TestClient_ProposeData(t *testing.T) {
l := onet.NewTCPTest()
_, el, _ := l.GenTree(5, true)
defer l.CloseAll()
c := NewTestClient(l)
log.Lvl1("Creating root and control chain")
_, inter, cerr := c.CreateRootControl(el, el, 1, 1, 1, VerifyNone)
log.ErrFatal(cerr)
td := &testData{1, "data-sc"}
log.Lvl1("Creating data chain")
var data1 *SkipBlock
inter, data1, cerr = c.CreateData(inter, 1, 1, VerifyNone, td)
log.ErrFatal(cerr)
td.A++
log.Lvl1("Proposing data on intermediate chain")
data2, cerr := c.ProposeData(inter, data1, td)
log.ErrFatal(cerr)
dataLast, cerr := c.GetUpdateChain(inter, data1.Hash)
log.ErrFatal(cerr)
if len(dataLast.Update) != 2 {
t.Fatal("Should have two SkipBlocks for update-chain", len(dataLast.Update))
}
if !dataLast.Update[1].Equal(data2.Latest) {
t.Fatal("Newest SkipBlock should be stored")
}
c.Close()
}
开发者ID:dedis,项目名称:cothority,代码行数:28,代码来源:api_test.go
示例9: TestClient_GetUpdateChain
func TestClient_GetUpdateChain(t *testing.T) {
if testing.Short() {
t.Skip("Long run not good for Travis")
}
l := onet.NewTCPTest()
_, el, _ := l.GenTree(5, true)
defer l.CloseAll()
clients := make(map[int]*Client)
for i := range [8]byte{} {
clients[i] = NewTestClient(l)
}
_, inter, cerr := clients[0].CreateRootControl(el, el, 1, 1, 1, VerifyNone)
log.ErrFatal(cerr)
wg := sync.WaitGroup{}
for i := range [128]byte{} {
wg.Add(1)
go func(i int) {
_, cerr := clients[i%8].GetUpdateChain(inter, inter.Hash)
log.ErrFatal(cerr)
wg.Done()
}(i)
}
wg.Wait()
}
开发者ID:dedis,项目名称:cothority,代码行数:26,代码来源:api_test.go
示例10: newSkipchainService
func newSkipchainService(c *onet.Context, path string) onet.Service {
s := &Service{
ServiceProcessor: onet.NewServiceProcessor(c),
path: path,
SkipBlockMap: &SkipBlockMap{make(map[string]*SkipBlock)},
verifiers: map[VerifierID]SkipBlockVerifier{},
}
var err error
s.Propagate, err = manage.NewPropagationFunc(c, "SkipchainPropagate", s.PropagateSkipBlock)
log.ErrFatal(err)
c.ProtocolRegister(skipchainBFT, func(n *onet.TreeNodeInstance) (onet.ProtocolInstance, error) {
return bftcosi.NewBFTCoSiProtocol(n, s.bftVerify)
})
if err := s.tryLoad(); err != nil {
log.Error(err)
}
log.ErrFatal(s.RegisterHandlers(s.ProposeSkipBlock, s.SetChildrenSkipBlock,
s.GetUpdateChain))
if err := s.RegisterVerification(VerifyShard, s.VerifyShardFunc); err != nil {
log.Panic(err)
}
if err := s.RegisterVerification(VerifyNone, s.VerifyNoneFunc); err != nil {
log.Panic(err)
}
return s
}
开发者ID:dedis,项目名称:cothority,代码行数:26,代码来源:skipchain.go
示例11: signFile
// signFile will search for the file and sign it
// it always returns nil as an error
func signFile(c *cli.Context) error {
if c.Args().First() == "" {
log.Fatal("Please give the file to sign", 1)
}
fileName := c.Args().First()
groupToml := c.String(optionGroup)
file, err := os.Open(fileName)
log.ErrFatal(err, "Couldn't read file to be signed:")
sig, err := sign(file, groupToml)
log.ErrFatal(err, "Couldn't create signature:")
log.Lvl3(sig)
var outFile *os.File
outFileName := c.String("out")
if outFileName != "" {
outFile, err = os.Create(outFileName)
log.ErrFatal(err, "Couldn't create signature file:")
} else {
outFile = os.Stdout
}
writeSigAsJSON(sig, outFile)
if outFileName != "" {
log.Lvl2("Signature written to: %s", outFile.Name())
} // else keep the Stdout empty
return nil
}
开发者ID:dedis,项目名称:cothority,代码行数:29,代码来源:client.go
示例12: TestIdentity_ConfigNewCheck
func TestIdentity_ConfigNewCheck(t *testing.T) {
l := onet.NewTCPTest()
_, el, _ := l.GenTree(5, true)
defer l.CloseAll()
c1 := NewIdentity(el, 50, "one")
log.ErrFatal(c1.CreateIdentity())
conf2 := c1.Config.Copy()
kp2 := config.NewKeyPair(network.Suite)
conf2.Device["two"] = &Device{kp2.Public}
conf2.Data["two"] = "public2"
log.ErrFatal(c1.ProposeSend(conf2))
log.ErrFatal(c1.ProposeUpdate())
al := c1.Proposed
assert.NotNil(t, al)
o2, ok := al.Device["two"]
assert.True(t, ok)
assert.True(t, kp2.Public.Equal(o2.Point))
pub2, ok := al.Data["two"]
assert.True(t, ok)
assert.Equal(t, "public2", pub2)
}
开发者ID:dedis,项目名称:cothority,代码行数:25,代码来源:api_test.go
示例13: TestService_RegisterVerification
func TestService_RegisterVerification(t *testing.T) {
// Testing whether we sign correctly the SkipBlocks
onet.RegisterNewService("ServiceVerify", newServiceVerify)
local := onet.NewLocalTest()
defer local.CloseAll()
hosts, el, s1 := makeHELS(local, 3)
VerifyTest := VerifierID(uuid.NewV5(uuid.NamespaceURL, "Test1"))
ver := make(chan bool, 3)
verifier := func(msg []byte, s *SkipBlock) bool {
ver <- true
return true
}
for _, h := range hosts {
s := h.GetService(ServiceName).(*Service)
log.ErrFatal(s.RegisterVerification(VerifyTest, verifier))
}
sb, err := makeGenesisRosterArgs(s1, el, nil, VerifyTest, 1, 1)
log.ErrFatal(err)
require.NotNil(t, sb.Data)
require.Equal(t, 3, len(ver))
sb, err = makeGenesisRosterArgs(s1, el, nil, ServiceVerifier, 1, 1)
log.ErrFatal(err)
require.NotNil(t, sb.Data)
require.Equal(t, 3, len(ServiceVerifierChan))
}
开发者ID:dedis,项目名称:cothority,代码行数:26,代码来源:skipchain_test.go
示例14: loadConfig
// loadConfig will try to load the configuration and `fatal` if it is there but
// not valid. If the config-file is missing altogether, loaded will be false and
// an empty config-file will be returned.
func loadConfig(c *cli.Context) (cfg *ciscConfig, loaded bool) {
cfg = &ciscConfig{Identity: &identity.Identity{}}
loaded = true
configFile := getConfig(c)
log.Lvl2("Loading from", configFile)
buf, err := ioutil.ReadFile(configFile)
if err != nil {
if os.IsNotExist(err) {
return
}
log.ErrFatal(err)
}
_, msg, err := network.UnmarshalRegistered(buf)
log.ErrFatal(err)
cfg, loaded = msg.(*ciscConfig)
cfg.Identity.Client = onet.NewClient(identity.ServiceName)
for _, f := range cfg.Follow {
f.Client = onet.NewClient(identity.ServiceName)
}
if !loaded {
log.Fatal("Wrong message-type in config-file")
}
return
}
开发者ID:dedis,项目名称:cothority,代码行数:28,代码来源:lib.go
示例15: TestService_SetChildrenSkipBlock
func TestService_SetChildrenSkipBlock(t *testing.T) {
// How many nodes in Root
nodesRoot := 3
local := onet.NewLocalTest()
defer local.CloseAll()
hosts, el, genService := local.MakeHELS(nodesRoot, skipchainSID)
service := genService.(*Service)
// Setting up two chains and linking one to the other
sbRoot, err := makeGenesisRoster(service, el)
log.ErrFatal(err)
sbInter, err := makeGenesisRosterArgs(service, el, sbRoot.Hash, VerifyNone, 1, 1)
log.ErrFatal(err)
scsb := &SetChildrenSkipBlock{sbRoot.Hash, sbInter.Hash}
service.SetChildrenSkipBlock(scsb)
// Verifying other nodes also got the updated chains
// Check for the root-chain
for i, h := range hosts {
log.Lvlf2("%x", skipchainSID)
s := local.Services[h.ServerIdentity.ID][skipchainSID].(*Service)
m, err := s.GetUpdateChain(&GetUpdateChain{sbRoot.Hash})
log.ErrFatal(err, "Failed in iteration="+strconv.Itoa(i)+":")
sb := m.(*GetUpdateChainReply)
log.Lvl2(s.Context)
if len(sb.Update) != 1 {
// we expect only the first block
t.Fatal("There should be only 1 SkipBlock in the update")
}
link := sb.Update[0].ChildSL
if !bytes.Equal(link.Hash, sbInter.Hash) {
t.Fatal("The child-link doesn't point to our intermediate SkipBlock", i)
}
// We need to verify the signature on the child-link, too. This
// has to be signed by the collective signature of sbRoot.
if cerr := sbRoot.VerifySignatures(); cerr != nil {
t.Fatal("Signature on child-link is not valid")
}
}
// And check for the intermediate-chain to be updated
for _, h := range hosts {
s := local.Services[h.ServerIdentity.ID][skipchainSID].(*Service)
m, cerr := s.GetUpdateChain(&GetUpdateChain{sbInter.Hash})
sb := m.(*GetUpdateChainReply)
log.ErrFatal(cerr)
if len(sb.Update) != 1 {
t.Fatal("There should be only 1 SkipBlock in the update")
}
if !bytes.Equal(sb.Update[0].ParentBlockID, sbRoot.Hash) {
t.Fatal("The intermediate SkipBlock doesn't point to the root")
}
if err := sb.Update[0].VerifySignatures(); err != nil {
t.Fatal("Signature of that SkipBlock doesn't fit")
}
}
}
开发者ID:dedis,项目名称:cothority,代码行数:59,代码来源:skipchain_test.go
示例16: TestService_GetUpdateChain
func TestService_GetUpdateChain(t *testing.T) {
// Create a small chain and test whether we can get from one element
// of the chain to the last element with a valid slice of SkipBlocks
local := onet.NewLocalTest()
defer local.CloseAll()
sbLength := 3
_, el, gs := local.MakeHELS(sbLength, skipchainSID)
s := gs.(*Service)
sbs := make([]*SkipBlock, sbLength)
var err error
sbs[0], err = makeGenesisRoster(s, el)
log.ErrFatal(err)
log.Lvl1("Initialize skipchain.")
// init skipchain
for i := 1; i < sbLength; i++ {
log.Lvl2("Doing skipblock", i)
newSB := NewSkipBlock()
newSB.Roster = el
psbrMsg, err := s.ProposeSkipBlock(&ProposeSkipBlock{sbs[i-1].Hash, newSB})
assert.Nil(t, err)
reply := psbrMsg.(*ProposedSkipBlockReply)
sbs[i] = reply.Latest
}
for i := 0; i < sbLength; i++ {
m, err := s.GetUpdateChain(&GetUpdateChain{sbs[i].Hash})
sbc := m.(*GetUpdateChainReply)
log.ErrFatal(err)
if !sbc.Update[0].Equal(sbs[i]) {
t.Fatal("First hash is not from our SkipBlock")
}
if !sbc.Update[len(sbc.Update)-1].Equal(sbs[sbLength-1]) {
log.Lvl2(sbc.Update[len(sbc.Update)-1].Hash)
log.Lvl2(sbs[sbLength-1].Hash)
t.Fatal("Last Hash is not equal to last SkipBlock for", i)
}
for up, sb1 := range sbc.Update {
log.ErrFatal(sb1.VerifySignatures())
if up < len(sbc.Update)-1 {
sb2 := sbc.Update[up+1]
h1 := sb1.Height
h2 := sb2.Height
log.Lvl2("sbc1.Height=", sb1.Height)
log.Lvl2("sbc2.Height=", sb2.Height)
// height := min(len(sb1.ForwardLink), h2)
height := h1
if h2 < height {
height = h2
}
if !bytes.Equal(sb1.ForwardLink[height-1].Hash,
sb2.Hash) {
t.Fatal("Forward-pointer of", up,
"is different of hash in", up+1)
}
}
}
}
}
开发者ID:dedis,项目名称:cothority,代码行数:58,代码来源:skipchain_test.go
示例17: loadConfigOrFail
// loadConfigOrFail tries to load the config and fails if it doesn't succeed.
// If a configuration has been loaded, it will update the config and propose
// part of the identity.
func loadConfigOrFail(c *cli.Context) *ciscConfig {
cfg, loaded := loadConfig(c)
if !loaded {
log.Fatal("Couldn't load configuration-file")
}
log.ErrFatal(cfg.ConfigUpdate())
log.ErrFatal(cfg.ProposeUpdate())
return cfg
}
开发者ID:dedis,项目名称:cothority,代码行数:12,代码来源:lib.go
示例18: main
func main() {
network.RegisterPacketType(&Database{})
app := cli.NewApp()
app.Name = "Guard"
app.Usage = "Get and print status of all servers of a file."
app.Flags = []cli.Flag{
cli.StringFlag{
Name: "group, gd",
Value: "group.toml",
Usage: "Cothority group definition in `FILE.toml`",
},
cli.IntFlag{
Name: "debug, d",
Value: 0,
Usage: "debug-level: `integer`: 1 for terse, 5 for maximal",
},
}
app.Commands = []cli.Command{
{
Name: "setpass",
Aliases: []string{"s"},
Usage: "Setup the configuration for the server (interactive)",
Action: setpass,
},
{
Name: "setup",
Aliases: []string{"su"},
Usage: "Saves the cothority group-toml to the configuration",
ArgsUsage: "Give group definition",
Action: setup,
},
{
Name: "recover",
Aliases: []string{"r"},
Usage: "Gets the password back from the guards",
Action: get,
},
}
app.Before = func(c *cli.Context) error {
b, err := ioutil.ReadFile("config.bin")
if os.IsNotExist(err) {
return nil
}
log.ErrFatal(err, "The config.bin file threw an error")
_, msg, err := network.UnmarshalRegistered(b)
log.ErrFatal(err, "UnmarshalRegistered messeed up")
var ok bool
db, ok = msg.(*Database)
if !ok {
log.Fatal("The message was improperly converted")
}
return nil
}
app.Run(os.Args)
}
开发者ID:dedis,项目名称:cothority,代码行数:57,代码来源:guard.go
示例19: getGroup
// Reads the group-file and returns it
func getGroup(c *cli.Context) *config.Group {
gfile := c.Args().Get(0)
gr, err := os.Open(gfile)
log.ErrFatal(err)
defer gr.Close()
groups, err := config.ReadGroupDescToml(gr)
log.ErrFatal(err)
if groups == nil || groups.Roster == nil || len(groups.Roster.List) == 0 {
log.Fatal("No servers found in roster from", gfile)
}
return groups
}
开发者ID:dedis,项目名称:cothority,代码行数:13,代码来源:lib.go
示例20: Config
// Config contacts all servers and verifies if it receives a valid
// signature from each.
// If the roster is empty it will return an error.
// If a server doesn't reply in time, it will return an error.
func Config(tomlFileName string) error {
f, err := os.Open(tomlFileName)
log.ErrFatal(err, "Couldn't open group definition file")
group, err := config.ReadGroupDescToml(f)
log.ErrFatal(err, "Error while reading group definition file", err)
if len(group.Roster.List) == 0 {
log.ErrFatalf(err, "Empty entity or invalid group defintion in: %s",
tomlFileName)
}
log.Info("Checking the availability and responsiveness of the servers in the group...")
return Servers(group)
}
开发者ID:dedis,项目名称:cothority,代码行数:16,代码来源:check.go
注:本文中的github.com/dedis/onet/log.ErrFatal函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论