aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitrij Koniajev <dimchansky@gmail.com>2018-10-16 06:47:25 +0800
committerFelix Lange <fjl@users.noreply.github.com>2018-10-16 06:47:25 +0800
commit6a7695e3676ef8275afd5eafde6e045b7a7ab024 (patch)
treedc780ccb960c9ef7c82c3a50af353e224d869633
parent16e4d0e0055f7fce620ff6881a1393d955c06cee (diff)
downloaddexon-6a7695e3676ef8275afd5eafde6e045b7a7ab024.tar
dexon-6a7695e3676ef8275afd5eafde6e045b7a7ab024.tar.gz
dexon-6a7695e3676ef8275afd5eafde6e045b7a7ab024.tar.bz2
dexon-6a7695e3676ef8275afd5eafde6e045b7a7ab024.tar.lz
dexon-6a7695e3676ef8275afd5eafde6e045b7a7ab024.tar.xz
dexon-6a7695e3676ef8275afd5eafde6e045b7a7ab024.tar.zst
dexon-6a7695e3676ef8275afd5eafde6e045b7a7ab024.zip
ethdb, rpc: support building on js/wasm (#17709)
The changes allow building WebAssembly applications which use ethclient.Client.
-rw-r--r--ethdb/database.go70
-rw-r--r--ethdb/database_js.go68
-rw-r--r--ethdb/database_js_test.go25
-rw-r--r--ethdb/database_test.go2
-rw-r--r--ethdb/table.go51
-rw-r--r--ethdb/table_batch.go51
-rw-r--r--rpc/ipc_js.go37
7 files changed, 236 insertions, 68 deletions
diff --git a/ethdb/database.go b/ethdb/database.go
index 99abd09b9..6c62d6a38 100644
--- a/ethdb/database.go
+++ b/ethdb/database.go
@@ -14,6 +14,8 @@
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+// +build !js
+
package ethdb
import (
@@ -380,71 +382,3 @@ func (b *ldbBatch) Reset() {
b.b.Reset()
b.size = 0
}
-
-type table struct {
- db Database
- prefix string
-}
-
-// NewTable returns a Database object that prefixes all keys with a given
-// string.
-func NewTable(db Database, prefix string) Database {
- return &table{
- db: db,
- prefix: prefix,
- }
-}
-
-func (dt *table) Put(key []byte, value []byte) error {
- return dt.db.Put(append([]byte(dt.prefix), key...), value)
-}
-
-func (dt *table) Has(key []byte) (bool, error) {
- return dt.db.Has(append([]byte(dt.prefix), key...))
-}
-
-func (dt *table) Get(key []byte) ([]byte, error) {
- return dt.db.Get(append([]byte(dt.prefix), key...))
-}
-
-func (dt *table) Delete(key []byte) error {
- return dt.db.Delete(append([]byte(dt.prefix), key...))
-}
-
-func (dt *table) Close() {
- // Do nothing; don't close the underlying DB.
-}
-
-type tableBatch struct {
- batch Batch
- prefix string
-}
-
-// NewTableBatch returns a Batch object which prefixes all keys with a given string.
-func NewTableBatch(db Database, prefix string) Batch {
- return &tableBatch{db.NewBatch(), prefix}
-}
-
-func (dt *table) NewBatch() Batch {
- return &tableBatch{dt.db.NewBatch(), dt.prefix}
-}
-
-func (tb *tableBatch) Put(key, value []byte) error {
- return tb.batch.Put(append([]byte(tb.prefix), key...), value)
-}
-
-func (tb *tableBatch) Delete(key []byte) error {
- return tb.batch.Delete(append([]byte(tb.prefix), key...))
-}
-
-func (tb *tableBatch) Write() error {
- return tb.batch.Write()
-}
-
-func (tb *tableBatch) ValueSize() int {
- return tb.batch.ValueSize()
-}
-
-func (tb *tableBatch) Reset() {
- tb.batch.Reset()
-}
diff --git a/ethdb/database_js.go b/ethdb/database_js.go
new file mode 100644
index 000000000..ba6eeb5a2
--- /dev/null
+++ b/ethdb/database_js.go
@@ -0,0 +1,68 @@
+// Copyright 2014 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
+// +build js
+
+package ethdb
+
+import (
+ "errors"
+)
+
+var errNotSupported = errors.New("ethdb: not supported")
+
+type LDBDatabase struct {
+}
+
+// NewLDBDatabase returns a LevelDB wrapped object.
+func NewLDBDatabase(file string, cache int, handles int) (*LDBDatabase, error) {
+ return nil, errNotSupported
+}
+
+// Path returns the path to the database directory.
+func (db *LDBDatabase) Path() string {
+ return ""
+}
+
+// Put puts the given key / value to the queue
+func (db *LDBDatabase) Put(key []byte, value []byte) error {
+ return errNotSupported
+}
+
+func (db *LDBDatabase) Has(key []byte) (bool, error) {
+ return false, errNotSupported
+}
+
+// Get returns the given key if it's present.
+func (db *LDBDatabase) Get(key []byte) ([]byte, error) {
+ return nil, errNotSupported
+}
+
+// Delete deletes the key from the queue and database
+func (db *LDBDatabase) Delete(key []byte) error {
+ return errNotSupported
+}
+
+func (db *LDBDatabase) Close() {
+}
+
+// Meter configures the database metrics collectors and
+func (db *LDBDatabase) Meter(prefix string) {
+}
+
+func (db *LDBDatabase) NewBatch() Batch {
+ return nil
+}
diff --git a/ethdb/database_js_test.go b/ethdb/database_js_test.go
new file mode 100644
index 000000000..b4c12ae0b
--- /dev/null
+++ b/ethdb/database_js_test.go
@@ -0,0 +1,25 @@
+// Copyright 2014 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
+// +build js
+
+package ethdb_test
+
+import (
+ "github.com/ethereum/go-ethereum/ethdb"
+)
+
+var _ ethdb.Database = &ethdb.LDBDatabase{}
diff --git a/ethdb/database_test.go b/ethdb/database_test.go
index 74675cbe6..382fedbf9 100644
--- a/ethdb/database_test.go
+++ b/ethdb/database_test.go
@@ -14,6 +14,8 @@
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+// +build !js
+
package ethdb_test
import (
diff --git a/ethdb/table.go b/ethdb/table.go
new file mode 100644
index 000000000..28069c078
--- /dev/null
+++ b/ethdb/table.go
@@ -0,0 +1,51 @@
+// Copyright 2014 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
+package ethdb
+
+type table struct {
+ db Database
+ prefix string
+}
+
+// NewTable returns a Database object that prefixes all keys with a given
+// string.
+func NewTable(db Database, prefix string) Database {
+ return &table{
+ db: db,
+ prefix: prefix,
+ }
+}
+
+func (dt *table) Put(key []byte, value []byte) error {
+ return dt.db.Put(append([]byte(dt.prefix), key...), value)
+}
+
+func (dt *table) Has(key []byte) (bool, error) {
+ return dt.db.Has(append([]byte(dt.prefix), key...))
+}
+
+func (dt *table) Get(key []byte) ([]byte, error) {
+ return dt.db.Get(append([]byte(dt.prefix), key...))
+}
+
+func (dt *table) Delete(key []byte) error {
+ return dt.db.Delete(append([]byte(dt.prefix), key...))
+}
+
+func (dt *table) Close() {
+ // Do nothing; don't close the underlying DB.
+}
diff --git a/ethdb/table_batch.go b/ethdb/table_batch.go
new file mode 100644
index 000000000..ae83e79ce
--- /dev/null
+++ b/ethdb/table_batch.go
@@ -0,0 +1,51 @@
+// Copyright 2014 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
+package ethdb
+
+type tableBatch struct {
+ batch Batch
+ prefix string
+}
+
+// NewTableBatch returns a Batch object which prefixes all keys with a given string.
+func NewTableBatch(db Database, prefix string) Batch {
+ return &tableBatch{db.NewBatch(), prefix}
+}
+
+func (dt *table) NewBatch() Batch {
+ return &tableBatch{dt.db.NewBatch(), dt.prefix}
+}
+
+func (tb *tableBatch) Put(key, value []byte) error {
+ return tb.batch.Put(append([]byte(tb.prefix), key...), value)
+}
+
+func (tb *tableBatch) Delete(key []byte) error {
+ return tb.batch.Delete(append([]byte(tb.prefix), key...))
+}
+
+func (tb *tableBatch) Write() error {
+ return tb.batch.Write()
+}
+
+func (tb *tableBatch) ValueSize() int {
+ return tb.batch.ValueSize()
+}
+
+func (tb *tableBatch) Reset() {
+ tb.batch.Reset()
+}
diff --git a/rpc/ipc_js.go b/rpc/ipc_js.go
new file mode 100644
index 000000000..eceef050e
--- /dev/null
+++ b/rpc/ipc_js.go
@@ -0,0 +1,37 @@
+// Copyright 2015 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
+// +build js
+
+package rpc
+
+import (
+ "context"
+ "errors"
+ "net"
+)
+
+var errNotSupported = errors.New("rpc: not supported")
+
+// ipcListen will create a named pipe on the given endpoint.
+func ipcListen(endpoint string) (net.Listener, error) {
+ return nil, errNotSupported
+}
+
+// newIPCConnection will connect to a named pipe with the given endpoint as name.
+func newIPCConnection(ctx context.Context, endpoint string) (net.Conn, error) {
+ return nil, errNotSupported
+}