diff --git a/Makefile b/Makefile index 27d6c76..4569e38 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ all: fatd fat-cli -race: fatd-race fat-cli-race +race: fatd.race fat-cli.race distribution: fatd-distribution fat-cli-distribution @@ -22,11 +22,11 @@ fat-cli: $(SRC) fat-cli-distribution: $(SRC) env GOOS=linux GOARCH=amd64 go build -ldflags=$(CLI_LDFLAGS) -o fat-cli ./cli && env GOOS=windows GOARCH=amd64 go build -ldflags=$(CLI_LDFLAGS) -o fat-cli.exe ./cli && env GOOS=darwin GOARCH=amd64 go build -ldflags=$(CLI_LDFLAGS) -o fat-cli.app ./cli -fatd-race: $(SRC) - go build -race -ldflags=$(FATD_LDFLAGS) ./ +fatd.race: $(SRC) + go build -race -ldflags=$(FATD_LDFLAGS) -o ./fatd.race ./ -fat-cli-race: $(SRC) - go build -race -ldflags=$(CLI_LDFLAGS) -o fat-cli ./cli +fat-cli.race: $(SRC) + go build -race -ldflags=$(CLI_LDFLAGS) -o fat-cli.race ./cli .PHONY: clean purge-db unpurge-db diff --git a/README.md b/README.md index 5f9da6f..5f56d28 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![](https://png.icons8.com/ios-glyphs/200/5ECCDD/octahedron.png)![](https://png.icons8.com/color/64/3498db/golang.png) -# fatd - Factom Asset Token Daemon v0.1.2 - Alpha +# fatd - Factom Asset Token Daemon v0.2.0 - Alpha A daemon written in Golang that maintains the current state of Factom Asset Tokens (FAT) tokens. Includes a CLI for interacting with the FAT Daemon from diff --git a/cli/flag.go b/cli/flag.go index 962e500..5e56232 100644 --- a/cli/flag.go +++ b/cli/flag.go @@ -363,6 +363,12 @@ func Validate() error { if len(SubCommand) == 0 { return nil } + // set scheme for APIAddress if not present + apiAdr := strings.Split(APIAddress, "://") + if len(apiAdr) == 1 { + // use http:// + APIAddress = "http://" + APIAddress + } // Redact private data from debug output. factomdRPCPassword := "\"\"" if len(rpc.FactomdRPCPassword) > 0 { @@ -634,26 +640,29 @@ func requireFlags(names ...string) error { type AddressAmountMap fat0.AddressAmountMap func (m AddressAmountMap) Set(data string) error { - s := strings.SplitN(data, ":", 2) + s := strings.Split(data, ":") if len(s) != 2 { return fmt.Errorf("invalid format") } - adr := factom.RCDHash{} + var adr factom.Address if s[0] == "coinbase" { - adr = *coinbase.RCDHash() + adr = coinbase } else { if err := adr.FromString(s[0]); err != nil { return fmt.Errorf("invalid address: %v", err) } + if *adr.RCDHash() != *coinbase.RCDHash() { + allAddresses = append(allAddresses, adr) + } } - if _, ok := m[adr]; ok { + if _, ok := m[*adr.RCDHash()]; ok { return fmt.Errorf("duplicate address: %v", adr) } var amount uint64 if err := (*Amount)(&amount).Set(s[1]); err != nil { return err } - m[adr] = amount + m[*adr.RCDHash()] = amount return nil } func (m AddressAmountMap) String() string { @@ -662,20 +671,25 @@ func (m AddressAmountMap) String() string { type AddressNFTokensMap fat1.AddressNFTokensMap +var allAddresses []factom.Address + func (m AddressNFTokensMap) Set(data string) error { - s := strings.SplitN(data, ":", 2) + s := strings.Split(data, ":") if len(s) != 2 { return fmt.Errorf("invalid format") } - adr := factom.RCDHash{} + var adr factom.Address if s[0] == "coinbase" { - adr = *coinbase.RCDHash() + adr = coinbase } else { if err := adr.FromString(s[0]); err != nil { return fmt.Errorf("invalid address: %v", err) } + if *adr.RCDHash() != *coinbase.RCDHash() { + allAddresses = append(allAddresses, adr) + } } - if _, ok := m[adr]; ok { + if _, ok := m[*adr.RCDHash()]; ok { return fmt.Errorf("duplicate address: %v", adr) } @@ -684,7 +698,7 @@ func (m AddressNFTokensMap) Set(data string) error { return err } - m[adr] = tkns + m[*adr.RCDHash()] = tkns return nil } func (m AddressNFTokensMap) String() string { diff --git a/cli/transact.go b/cli/transact.go index 9b19116..faee208 100644 --- a/cli/transact.go +++ b/cli/transact.go @@ -40,8 +40,12 @@ func transactFAT0() error { } signingAddresses = append(signingAddresses, sk1) } else { - for rcd := range FAT0transaction.Inputs { - adr := factom.NewAddress(&rcd) + for i := range allAddresses { + adr := allAddresses[i] + if _, ok := FAT0transaction.Inputs[*adr.RCDHash()]; !ok { + continue + } + fmt.Println(adr) if err := adr.Get(); err != nil { return err } @@ -116,8 +120,12 @@ func transactFAT1() error { } signingAddresses = append(signingAddresses, sk1) } else { - for rcd := range FAT1transaction.Inputs { - adr := factom.NewAddress(&rcd) + for i := range allAddresses { + adr := allAddresses[i] + if _, ok := FAT1transaction.Inputs[*adr.RCDHash()]; !ok { + continue + } + fmt.Println(adr) if err := adr.Get(); err != nil { return err } diff --git a/factom/address.go b/factom/address.go index d675420..d017407 100644 --- a/factom/address.go +++ b/factom/address.go @@ -36,6 +36,9 @@ func NewAddressFromString(adrStr string) (Address, error) { } func (a *Address) Get() error { + if a.privateKey != nil { + return nil + } params := struct { A *Address `json:"address"` }{A: a}