mirror of https://github.com/ethereum/go-ethereum
commit
8affdf96e2
@ -1,174 +0,0 @@ |
||||
package common |
||||
|
||||
import ( |
||||
"fmt" |
||||
"math/big" |
||||
"os" |
||||
"os/user" |
||||
"path" |
||||
"path/filepath" |
||||
"runtime" |
||||
"time" |
||||
|
||||
"github.com/kardianos/osext" |
||||
) |
||||
|
||||
// MakeName creates a node name that follows the ethereum convention
|
||||
// for such names. It adds the operation system name and Go runtime version
|
||||
// the name.
|
||||
func MakeName(name, version string) string { |
||||
return fmt.Sprintf("%s/v%s/%s/%s", name, version, runtime.GOOS, runtime.Version()) |
||||
} |
||||
|
||||
func DefaultAssetPath() string { |
||||
var assetPath string |
||||
pwd, _ := os.Getwd() |
||||
srcdir := path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "cmd", "mist") |
||||
|
||||
// If the current working directory is the go-ethereum dir
|
||||
// assume a debug build and use the source directory as
|
||||
// asset directory.
|
||||
if pwd == srcdir { |
||||
assetPath = path.Join(pwd, "assets") |
||||
} else { |
||||
switch runtime.GOOS { |
||||
case "darwin": |
||||
// Get Binary Directory
|
||||
exedir, _ := osext.ExecutableFolder() |
||||
assetPath = filepath.Join(exedir, "../Resources") |
||||
case "linux": |
||||
assetPath = "/usr/share/mist" |
||||
case "windows": |
||||
assetPath = "./assets" |
||||
default: |
||||
assetPath = "." |
||||
} |
||||
} |
||||
|
||||
// Check if the assetPath exists. If not, try the source directory
|
||||
// This happens when binary is run from outside cmd/mist directory
|
||||
if _, err := os.Stat(assetPath); os.IsNotExist(err) { |
||||
assetPath = path.Join(srcdir, "assets") |
||||
} |
||||
|
||||
return assetPath |
||||
} |
||||
|
||||
func DefaultDataDir() string { |
||||
usr, _ := user.Current() |
||||
if runtime.GOOS == "darwin" { |
||||
return path.Join(usr.HomeDir, "Library/Ethereum") |
||||
} else if runtime.GOOS == "windows" { |
||||
return path.Join(usr.HomeDir, "AppData/Roaming/Ethereum") |
||||
} else { |
||||
return path.Join(usr.HomeDir, ".ethereum") |
||||
} |
||||
} |
||||
|
||||
func ToHex(b []byte) string { |
||||
hex := Bytes2Hex(b) |
||||
// Prefer output of "0x0" instead of "0x"
|
||||
if len(hex) == 0 { |
||||
hex = "0" |
||||
} |
||||
return "0x" + hex |
||||
} |
||||
|
||||
func FromHex(s string) []byte { |
||||
if len(s) > 1 { |
||||
if s[0:2] == "0x" { |
||||
s = s[2:] |
||||
} |
||||
if len(s)%2 == 1 { |
||||
s = "0" + s |
||||
} |
||||
return Hex2Bytes(s) |
||||
} |
||||
return nil |
||||
} |
||||
func IsWindows() bool { |
||||
return runtime.GOOS == "windows" |
||||
} |
||||
|
||||
func WindonizePath(path string) string { |
||||
if string(path[0]) == "/" && IsWindows() { |
||||
path = path[1:] |
||||
} |
||||
return path |
||||
} |
||||
|
||||
// The different number of units
|
||||
var ( |
||||
Douglas = BigPow(10, 42) |
||||
Einstein = BigPow(10, 21) |
||||
Ether = BigPow(10, 18) |
||||
Finney = BigPow(10, 15) |
||||
Szabo = BigPow(10, 12) |
||||
Shannon = BigPow(10, 9) |
||||
Babbage = BigPow(10, 6) |
||||
Ada = BigPow(10, 3) |
||||
Wei = big.NewInt(1) |
||||
) |
||||
|
||||
//
|
||||
// Currency to string
|
||||
// Returns a string representing a human readable format
|
||||
func CurrencyToString(num *big.Int) string { |
||||
var ( |
||||
fin *big.Int = num |
||||
denom string = "Wei" |
||||
) |
||||
|
||||
switch { |
||||
case num.Cmp(Douglas) >= 0: |
||||
fin = new(big.Int).Div(num, Douglas) |
||||
denom = "Douglas" |
||||
case num.Cmp(Einstein) >= 0: |
||||
fin = new(big.Int).Div(num, Einstein) |
||||
denom = "Einstein" |
||||
case num.Cmp(Ether) >= 0: |
||||
fin = new(big.Int).Div(num, Ether) |
||||
denom = "Ether" |
||||
case num.Cmp(Finney) >= 0: |
||||
fin = new(big.Int).Div(num, Finney) |
||||
denom = "Finney" |
||||
case num.Cmp(Szabo) >= 0: |
||||
fin = new(big.Int).Div(num, Szabo) |
||||
denom = "Szabo" |
||||
case num.Cmp(Shannon) >= 0: |
||||
fin = new(big.Int).Div(num, Shannon) |
||||
denom = "Shannon" |
||||
case num.Cmp(Babbage) >= 0: |
||||
fin = new(big.Int).Div(num, Babbage) |
||||
denom = "Babbage" |
||||
case num.Cmp(Ada) >= 0: |
||||
fin = new(big.Int).Div(num, Ada) |
||||
denom = "Ada" |
||||
} |
||||
|
||||
// TODO add comment clarifying expected behavior
|
||||
if len(fin.String()) > 5 { |
||||
return fmt.Sprintf("%sE%d %s", fin.String()[0:5], len(fin.String())-5, denom) |
||||
} |
||||
|
||||
return fmt.Sprintf("%v %s", fin, denom) |
||||
} |
||||
|
||||
// Common big integers often used
|
||||
var ( |
||||
Big1 = big.NewInt(1) |
||||
Big2 = big.NewInt(2) |
||||
Big3 = big.NewInt(3) |
||||
Big0 = big.NewInt(0) |
||||
BigTrue = Big1 |
||||
BigFalse = Big0 |
||||
Big32 = big.NewInt(32) |
||||
Big256 = big.NewInt(0xff) |
||||
Big257 = big.NewInt(257) |
||||
) |
||||
|
||||
func Bench(pre string, cb func()) { |
||||
start := time.Now() |
||||
cb() |
||||
fmt.Println(pre, ": took:", time.Since(start)) |
||||
} |
@ -1,89 +0,0 @@ |
||||
package common |
||||
|
||||
import ( |
||||
"bytes" |
||||
"math/big" |
||||
"os" |
||||
"testing" |
||||
|
||||
checker "gopkg.in/check.v1" |
||||
) |
||||
|
||||
type CommonSuite struct{} |
||||
|
||||
var _ = checker.Suite(&CommonSuite{}) |
||||
|
||||
func (s *CommonSuite) TestOS(c *checker.C) { |
||||
expwin := (os.PathSeparator == '\\' && os.PathListSeparator == ';') |
||||
res := IsWindows() |
||||
|
||||
if !expwin { |
||||
c.Assert(res, checker.Equals, expwin, checker.Commentf("IsWindows is", res, "but path is", os.PathSeparator)) |
||||
} else { |
||||
c.Assert(res, checker.Not(checker.Equals), expwin, checker.Commentf("IsWindows is", res, "but path is", os.PathSeparator)) |
||||
} |
||||
} |
||||
|
||||
func (s *CommonSuite) TestWindonziePath(c *checker.C) { |
||||
iswindowspath := os.PathSeparator == '\\' |
||||
path := "/opt/eth/test/file.ext" |
||||
res := WindonizePath(path) |
||||
ressep := string(res[0]) |
||||
|
||||
if !iswindowspath { |
||||
c.Assert(ressep, checker.Equals, "/") |
||||
} else { |
||||
c.Assert(ressep, checker.Not(checker.Equals), "/") |
||||
} |
||||
} |
||||
|
||||
func (s *CommonSuite) TestCommon(c *checker.C) { |
||||
douglas := CurrencyToString(BigPow(10, 43)) |
||||
einstein := CurrencyToString(BigPow(10, 22)) |
||||
ether := CurrencyToString(BigPow(10, 19)) |
||||
finney := CurrencyToString(BigPow(10, 16)) |
||||
szabo := CurrencyToString(BigPow(10, 13)) |
||||
shannon := CurrencyToString(BigPow(10, 10)) |
||||
babbage := CurrencyToString(BigPow(10, 7)) |
||||
ada := CurrencyToString(BigPow(10, 4)) |
||||
wei := CurrencyToString(big.NewInt(10)) |
||||
|
||||
c.Assert(douglas, checker.Equals, "10 Douglas") |
||||
c.Assert(einstein, checker.Equals, "10 Einstein") |
||||
c.Assert(ether, checker.Equals, "10 Ether") |
||||
c.Assert(finney, checker.Equals, "10 Finney") |
||||
c.Assert(szabo, checker.Equals, "10 Szabo") |
||||
c.Assert(shannon, checker.Equals, "10 Shannon") |
||||
c.Assert(babbage, checker.Equals, "10 Babbage") |
||||
c.Assert(ada, checker.Equals, "10 Ada") |
||||
c.Assert(wei, checker.Equals, "10 Wei") |
||||
} |
||||
|
||||
func (s *CommonSuite) TestLarge(c *checker.C) { |
||||
douglaslarge := CurrencyToString(BigPow(100000000, 43)) |
||||
adalarge := CurrencyToString(BigPow(100000000, 4)) |
||||
weilarge := CurrencyToString(big.NewInt(100000000)) |
||||
|
||||
c.Assert(douglaslarge, checker.Equals, "10000E298 Douglas") |
||||
c.Assert(adalarge, checker.Equals, "10000E7 Einstein") |
||||
c.Assert(weilarge, checker.Equals, "100 Babbage") |
||||
} |
||||
|
||||
//fromHex
|
||||
func TestFromHex(t *testing.T) { |
||||
input := "0x01" |
||||
expected := []byte{1} |
||||
result := FromHex(input) |
||||
if bytes.Compare(expected, result) != 0 { |
||||
t.Errorf("Expected % x got % x", expected, result) |
||||
} |
||||
} |
||||
|
||||
func TestFromHexOddLength(t *testing.T) { |
||||
input := "0x1" |
||||
expected := []byte{1} |
||||
result := FromHex(input) |
||||
if bytes.Compare(expected, result) != 0 { |
||||
t.Errorf("Expected % x got % x", expected, result) |
||||
} |
||||
} |
Loading…
Reference in new issue