diff --git a/.gitignore b/.gitignore index a8ed1beda..188904e8f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ lotus +**/*.h +**/*.a +**/*.pc diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..c0ea2b20d --- /dev/null +++ b/Makefile @@ -0,0 +1,10 @@ +blssigs: + ./scripts/install-bls-signatures.sh + +deps: blssigs + go mod download + +build: deps + go build -o lotus ./cmd/lotus + +.PHONY: build deps blssigs \ No newline at end of file diff --git a/chain/address/address.go b/chain/address/address.go index b6b3cb4e2..f085779a5 100644 --- a/chain/address/address.go +++ b/chain/address/address.go @@ -7,7 +7,7 @@ import ( "strconv" "strings" - "github.com/filecoin-project/go-filecoin/bls-signatures" + "github.com/filecoin-project/go-lotus/lib/bls-signatures" "github.com/filecoin-project/go-leb128" cbor "github.com/ipfs/go-ipld-cbor" diff --git a/chain/address/address_test.go b/chain/address/address_test.go index 766ca7db8..14bffd6c9 100644 --- a/chain/address/address_test.go +++ b/chain/address/address_test.go @@ -13,9 +13,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/filecoin-project/go-filecoin/bls-signatures" - "github.com/filecoin-project/go-filecoin/crypto" tf "github.com/filecoin-project/go-filecoin/testhelpers/testflags" + "github.com/filecoin-project/go-lotus/lib/bls-signatures" + "github.com/filecoin-project/go-lotus/lib/crypto" ) func init() { diff --git a/chain/mining.go b/chain/mining.go index 8bb9a8398..d30d16b95 100644 --- a/chain/mining.go +++ b/chain/mining.go @@ -5,8 +5,8 @@ import ( "fmt" "time" - bls "github.com/filecoin-project/go-filecoin/bls-signatures" "github.com/filecoin-project/go-lotus/chain/address" + bls "github.com/filecoin-project/go-lotus/lib/bls-signatures" cid "github.com/ipfs/go-cid" hamt "github.com/ipfs/go-hamt-ipld" "github.com/pkg/errors" diff --git a/chain/wallet.go b/chain/wallet.go index 73ef7e343..52c2a491f 100644 --- a/chain/wallet.go +++ b/chain/wallet.go @@ -7,8 +7,8 @@ import ( "github.com/minio/blake2b-simd" - bls "github.com/filecoin-project/go-filecoin/bls-signatures" - crypto "github.com/filecoin-project/go-filecoin/crypto" + "github.com/filecoin-project/go-lotus/lib/crypto" + "github.com/filecoin-project/go-lotus/lib/bls-signatures" ) const ( diff --git a/go.mod b/go.mod index a6f100624..5a3a55ef1 100644 --- a/go.mod +++ b/go.mod @@ -3,28 +3,45 @@ module github.com/filecoin-project/go-lotus go 1.12 require ( + github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect github.com/BurntSushi/toml v0.3.1 - github.com/filecoin-project/go-filecoin v0.0.1 + github.com/Microsoft/go-winio v0.4.12 // indirect + github.com/docker/distribution v2.7.1+incompatible // indirect + github.com/docker/docker v0.7.3-0.20190315170154-87d593639c77 // indirect + github.com/docker/go-connections v0.4.0 // indirect + github.com/docker/go-units v0.3.3 // indirect github.com/filecoin-project/go-leb128 v0.0.0-20190212224330-8d79a5489543 + github.com/golangci/golangci-lint v1.15.0 // indirect + github.com/gorilla/mux v1.7.0 // indirect github.com/ipfs/go-bitswap v0.1.5 github.com/ipfs/go-block-format v0.0.2 github.com/ipfs/go-blockservice v0.0.2 + github.com/ipfs/go-car v0.0.1 // indirect github.com/ipfs/go-cid v0.0.2 github.com/ipfs/go-datastore v0.0.5 - github.com/ipfs/go-hamt-ipld v0.0.1 + github.com/ipfs/go-fs-lock v0.0.1 // indirect + github.com/ipfs/go-hamt-ipld v0.0.0-20190613164304-cd074602062f github.com/ipfs/go-ipfs-blockstore v0.0.1 + github.com/ipfs/go-ipfs-cmds v0.0.1 // indirect + github.com/ipfs/go-ipfs-keystore v0.0.1 // indirect github.com/ipfs/go-ipfs-routing v0.1.0 github.com/ipfs/go-ipld-cbor v0.0.2 github.com/ipfs/go-ipld-format v0.0.2 github.com/ipfs/go-log v0.0.2-0.20190703113630-0c3cfb1eccc4 github.com/ipfs/go-merkledag v0.0.2 + github.com/ipfs/go-path v0.0.1 // indirect + github.com/ipfs/go-unixfs v0.0.1 // indirect + github.com/ipfs/iptb v1.3.8-0.20190401234037-98ccf4228a73 // indirect github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52 + github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 // indirect github.com/libp2p/go-libp2p v0.2.0 + github.com/libp2p/go-libp2p-autonat-svc v0.0.2 // indirect github.com/libp2p/go-libp2p-circuit v0.1.0 github.com/libp2p/go-libp2p-connmgr v0.1.0 github.com/libp2p/go-libp2p-core v0.0.6 github.com/libp2p/go-libp2p-discovery v0.1.0 github.com/libp2p/go-libp2p-kad-dht v0.1.1 + github.com/libp2p/go-libp2p-metrics v0.0.1 // indirect github.com/libp2p/go-libp2p-mplex v0.2.1 github.com/libp2p/go-libp2p-peer v0.2.0 github.com/libp2p/go-libp2p-peerstore v0.1.1 @@ -38,17 +55,29 @@ require ( github.com/libp2p/go-libp2p-yamux v0.2.1 github.com/libp2p/go-maddr-filter v0.0.4 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c // indirect github.com/multiformats/go-multiaddr v0.0.4 github.com/multiformats/go-multihash v0.0.5 + github.com/opencontainers/go-digest v1.0.0-rc1 // indirect + github.com/opencontainers/image-spec v1.0.1 // indirect github.com/pkg/errors v0.8.1 github.com/polydawn/refmt v0.0.0-20190408063855-01bf1e26dd14 + github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829 // indirect github.com/stretchr/testify v1.3.0 github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 github.com/whyrusleeping/pubsub v0.0.0-20131020042734-02de8aa2db3d github.com/whyrusleeping/sharray v0.0.0-20190520213710-bd32aab369f8 + github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + github.com/xeipuuv/gojsonschema v1.1.0 // indirect go.opencensus.io v0.22.0 // indirect go.uber.org/dig v1.7.0 // indirect go.uber.org/fx v1.9.0 go.uber.org/goleak v0.10.0 // indirect + golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421 // indirect + golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect + golang.org/x/tools v0.0.0-20190312170243-e65039ee4138 // indirect gopkg.in/urfave/cli.v2 v2.0.0-20180128182452-d3ae77c26ac8 + gotest.tools v2.2.0+incompatible // indirect ) diff --git a/go.sum b/go.sum index 2247c7490..cba053256 100644 --- a/go.sum +++ b/go.sum @@ -183,6 +183,8 @@ github.com/ipfs/go-ds-badger v0.0.2/go.mod h1:Y3QpeSFWQf6MopLTiZD+VT6IC1yZqaGmjv github.com/ipfs/go-ds-leveldb v0.0.1/go.mod h1:feO8V3kubwsEF22n0YRQCffeb79OOYIykR4L04tMOYc= github.com/ipfs/go-fs-lock v0.0.1 h1:XHX8uW4jQBYWHj59XXcjg7BHlHxV9ZOYs6Y43yb7/l0= github.com/ipfs/go-fs-lock v0.0.1/go.mod h1:DNBekbboPKcxs1aukPSaOtFA3QfSdi5C855v0i9XJ8Y= +github.com/ipfs/go-hamt-ipld v0.0.0-20190613164304-cd074602062f h1:CpQZA1HsuaRQaFIUq7h/KqSyclyp/LrpcyifPnKRT2k= +github.com/ipfs/go-hamt-ipld v0.0.0-20190613164304-cd074602062f/go.mod h1:WrX60HHX2SeMb602Z1s9Ztnf/4fzNHzwH9gxNTVpEmk= github.com/ipfs/go-hamt-ipld v0.0.1 h1:dOS1Bp9hyZUozI4Y7rC+FJqitur00tWlIFmLLgNev38= github.com/ipfs/go-hamt-ipld v0.0.1/go.mod h1:WrX60HHX2SeMb602Z1s9Ztnf/4fzNHzwH9gxNTVpEmk= github.com/ipfs/go-ipfs-blockstore v0.0.1 h1:O9n3PbmTYZoNhkgkEyrXTznbmktIXif62xLX+8dPHzc= @@ -220,9 +222,11 @@ github.com/ipfs/go-ipfs-routing v0.1.0/go.mod h1:hYoUkJLyAUKhF58tysKpids8RNDPO42 github.com/ipfs/go-ipfs-util v0.0.1 h1:Wz9bL2wB2YBJqggkA4dD7oSmqB4cAnpNbGrlHJulv50= github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc= github.com/ipfs/go-ipld-cbor v0.0.1/go.mod h1:RXHr8s4k0NE0TKhnrxqZC9M888QfsBN9rhS5NjfKzY8= +github.com/ipfs/go-ipld-cbor v0.0.2 h1:amzFztBQQQ69UA5+f7JRfoXF/z2l//MGfEDHVkS20+s= github.com/ipfs/go-ipld-cbor v0.0.2/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc= github.com/ipfs/go-ipld-format v0.0.1 h1:HCu4eB/Gh+KD/Q0M8u888RFkorTWNIL3da4oc5dwc80= github.com/ipfs/go-ipld-format v0.0.1/go.mod h1:kyJtbkDALmFHv3QR6et67i35QzO3S0dCDnkOJhcZkms= +github.com/ipfs/go-ipld-format v0.0.2 h1:OVAGlyYT6JPZ0pEfGntFPS40lfrDmaDbQwNHEY2G9Zs= github.com/ipfs/go-ipld-format v0.0.2/go.mod h1:4B6+FM2u9OJ9zCV+kSbgFAZlOrv1Hqbf0INGQgiKf9k= github.com/ipfs/go-log v0.0.1 h1:9XTUN/rW64BCG1YhPK9Hoy3q8nr4gOmHHBpgFdfw6Lc= github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= @@ -245,10 +249,10 @@ github.com/ipfs/go-verifcid v0.0.1 h1:m2HI7zIuR5TFyQ1b79Da5N9dnnCP1vcu2QqawmWlK2 github.com/ipfs/go-verifcid v0.0.1/go.mod h1:5Hrva5KBeIog4A+UpqlaIU+DEstipcJYQQZc0g37pY0= github.com/ipfs/iptb v1.3.8-0.20190401234037-98ccf4228a73/go.mod h1:1rzHpCYtNp87/+hTxG5TfCVn/yMY3dKnLn8tBiMfdmg= github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52 h1:QG4CGBqCeuBo6aZlGAamSkxWdgWfZGeE49eUOWJPA4c= -github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52/go.mod h1:fdg+/X9Gg4AsAIzWpEHwnqd+QY3b7lajxyjE1m4hkq4= -github.com/jackpal/gateway v1.0.4/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA= github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52 h1:QG4CGBqCeuBo6aZlGAamSkxWdgWfZGeE49eUOWJPA4c= github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52/go.mod h1:fdg+/X9Gg4AsAIzWpEHwnqd+QY3b7lajxyjE1m4hkq4= +github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52/go.mod h1:fdg+/X9Gg4AsAIzWpEHwnqd+QY3b7lajxyjE1m4hkq4= +github.com/jackpal/gateway v1.0.4/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA= github.com/jackpal/gateway v1.0.5 h1:qzXWUJfuMdlLMtt0a3Dgt+xkWQiA5itDEITVJtuSwMc= github.com/jackpal/gateway v1.0.5/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA= github.com/jackpal/go-nat-pmp v1.0.1 h1:i0LektDkO1QlrTm/cSuP+PyBCDnYvjPLGl4LdWEMiaA= @@ -356,6 +360,7 @@ github.com/libp2p/go-libp2p-netutil v0.0.1/go.mod h1:GdusFvujWZI9Vt0X5BKqwWWmZFx github.com/libp2p/go-libp2p-netutil v0.1.0 h1:zscYDNVEcGxyUpMd0JReUZTrpMfia8PmLKcKF72EAMQ= github.com/libp2p/go-libp2p-netutil v0.1.0/go.mod h1:3Qv/aDqtMLTUyQeundkKsA+YCThNdbQD54k3TqjpbFU= github.com/libp2p/go-libp2p-peer v0.0.1/go.mod h1:nXQvOBbwVqoP+T5Y5nCjeH4sP9IX/J0AMzcDUVruVoo= +github.com/libp2p/go-libp2p-peer v0.2.0 h1:EQ8kMjaCUwt/Y5uLgjT8iY2qg0mGUT0N1zUjer50DsY= github.com/libp2p/go-libp2p-peer v0.2.0/go.mod h1:RCffaCvUyW2CJmG2gAWVqwePwW7JMgxjsHm7+J5kjWY= github.com/libp2p/go-libp2p-peerstore v0.0.1/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20= github.com/libp2p/go-libp2p-peerstore v0.1.0/go.mod h1:2CeHkQsr8svp4fZ+Oi9ykN1HBb6u0MOvdJ7YIsmcwtY= @@ -507,6 +512,7 @@ github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQ github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opentracing/opentracing-go v1.0.2 h1:3jA2P6O1F9UOrWVpwrIo17pu01KWvNWg4X946/Y5Zwg= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/openzipkin/zipkin-go v0.1.3/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= @@ -691,6 +697,7 @@ golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/text v0.0.0-20170915090833-1cbadb444a80/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20170915040203-e531a2a1c15f/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/scripts/README b/scripts/README new file mode 100644 index 000000000..43eedb800 --- /dev/null +++ b/scripts/README @@ -0,0 +1,3 @@ +From https://github.com/filecoin-project/go-filecoin/tree/master/scripts + +Try to keep in sync \ No newline at end of file diff --git a/scripts/install-bls-signatures.sh b/scripts/install-bls-signatures.sh new file mode 100755 index 000000000..59ed6f734 --- /dev/null +++ b/scripts/install-bls-signatures.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +set -Eeo pipefail + +source "$(dirname "${BASH_SOURCE[0]}")/install-shared.bash" + +subm_dir="lib/bls-signatures/bls-signatures" + +git submodule update --init --recursive $subm_dir + +if download_release_tarball tarball_path "${subm_dir}"; then + tmp_dir=$(mktemp -d) + tar -C $tmp_dir -xzf $tarball_path + + cp -R "${tmp_dir}/include" lib/bls-signatures + cp -R "${tmp_dir}/lib" lib/bls-signatures +else + (>&2 echo "failed to find or obtain precompiled assets for ${subm_dir}, falling back to local build") + build_from_source "${subm_dir}" + + mkdir -p lib/bls-signatures/include + mkdir -p lib/bls-signatures/lib/pkgconfig + + find "${subm_dir}" -type f -name libbls_signatures.h -exec mv -- "{}" ./lib/bls-signatures/include/ \; + find "${subm_dir}" -type f -name libbls_signatures_ffi.a -exec cp -- "{}" ./lib/bls-signatures/lib/ \; + find "${subm_dir}" -type f -name libbls_signatures.pc -exec cp -- "{}" ./lib/bls-signatures/lib/pkgconfig/ \; +fi diff --git a/scripts/install-shared.bash b/scripts/install-shared.bash new file mode 100755 index 000000000..19474a0b2 --- /dev/null +++ b/scripts/install-shared.bash @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +download_release_tarball() { + __resultvar=$1 + __submodule_path=$2 + __repo_name=$(echo $2 | cut -d '/' -f 2) + __release_name="${__repo_name}-$(uname)" + __release_sha1=$(git rev-parse @:"${__submodule_path}") + __release_tag="${__release_sha1:0:16}" + __release_tag_url="https://api.github.com/repos/filecoin-project/${__repo_name}/releases/tags/${__release_tag}" + + echo "acquiring release @ ${__release_tag}" + + __release_response=$(curl \ + --retry 3 \ + --location $__release_tag_url) + + __release_url=$(echo $__release_response | jq -r ".assets[] | select(.name | contains(\"${__release_name}\")) | .url") + + if [[ -z "$__release_url" ]]; then + (>&2 echo "failed to download release (tag URL: ${__release_tag_url}, response: ${__release_response})") + return 1 + fi + + __tar_path="/tmp/${__release_name}_$(basename ${__release_url}).tar.gz" + + if [[ ! -f "${__tar_path}" ]]; then + __asset_url=$(curl \ + --head \ + --retry 3 \ + --header "Accept:application/octet-stream" \ + --location \ + --output /dev/null \ + -w %{url_effective} \ + "$__release_url") + + curl --retry 3 --output "${__tar_path}" "$__asset_url" + if [[ $? -ne "0" ]]; then + (>&2 echo "failed to download release asset (tag URL: ${__release_tag_url}, asset URL: ${__asset_url})") + return 1 + fi + fi + + eval $__resultvar="'$__tar_path'" +} + +build_from_source() { + __submodule_path=$1 + __submodule_sha1=$(git rev-parse @:"${__submodule_path}") + __submodule_sha1_truncated="${__submodule_sha1:0:16}" + + echo "building from source @ ${__submodule_sha1_truncated}" + + if ! [ -x "$(command -v cargo)" ]; then + (>&2 echo 'Error: cargo is not installed.') + (>&2 echo 'Install Rust toolchain to resolve this problem.') + exit 1 + fi + + if ! [ -x "$(command -v rustup)" ]; then + (>&2 echo 'Error: rustup is not installed.') + (>&2 echo 'Install Rust toolchain installer to resolve this problem.') + exit 1 + fi + + pushd $__submodule_path + + cargo --version + cargo update + + if [[ -f "./scripts/build-release.sh" ]]; then + ./scripts/build-release.sh $(cat rust-toolchain) + else + cargo build --release --all + fi + + popd +}