diff --git a/channelAcceptor.go b/channelAcceptor.go index ff07d2d..02ed9ed 100644 --- a/channelAcceptor.go +++ b/channelAcceptor.go @@ -6,6 +6,7 @@ import ( "fmt" "sync" + "github.com/callebtc/electronwall/api" "github.com/callebtc/electronwall/rules" "github.com/callebtc/electronwall/types" "github.com/lightningnetwork/lnd/lnrpc" @@ -23,11 +24,19 @@ func (app *App) getChannelAcceptEvent(ctx context.Context, req lnrpc.ChannelAcce if err != nil { log.Errorf(err.Error()) } + + noeInfo, err := api.GetApiNodeinfo(string(req.NodePubkey)) + if err != nil { + log.Errorf(err.Error()) + } + return types.ChannelAcceptEvent{ PubkeyFrom: hex.EncodeToString(req.NodePubkey), AliasFrom: alias, NodeInfo: info, Event: &req, + OneMl: noeInfo.OneMl, + Amboss: noeInfo.Amboss, }, nil } @@ -172,9 +181,9 @@ func (app *App) channelAcceptDecision(req lnrpc.ChannelAcceptRequest) (bool, err } // parse and make decision - log.Infof(hex.EncodeToString(req.NodePubkey)) + log.Infof("TRYING %s", string(req.NodePubkey)) for _, pubkey := range listToParse { - if hex.EncodeToString(req.NodePubkey) == pubkey || pubkey == "*" { + if string(req.NodePubkey) == pubkey || pubkey == "*" { accept = !accept break } diff --git a/go.mod b/go.mod index 86bdda1..c7852c4 100644 --- a/go.mod +++ b/go.mod @@ -6,8 +6,12 @@ require ( github.com/dop251/goja v0.0.0-20220815083517-0c74f9139fd6 github.com/jinzhu/configor v1.2.1 github.com/lightningnetwork/lnd v0.14.3-beta + github.com/machinebox/graphql v0.2.2 + github.com/matryer/is v1.4.0 // indirect github.com/sirupsen/logrus v1.8.1 github.com/stretchr/testify v1.7.0 + golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8 // indirect + golang.org/x/tools v0.1.10 // indirect google.golang.org/grpc v1.46.2 gopkg.in/macaroon.v2 v2.1.0 ) diff --git a/go.sum b/go.sum index f656cf0..2ed80fc 100644 --- a/go.sum +++ b/go.sum @@ -527,9 +527,13 @@ github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQ github.com/ltcsuite/ltcd v0.0.0-20190101042124-f37f8bf35796 h1:sjOGyegMIhvgfq5oaue6Td+hxZuf3tDC8lAPrFldqFw= github.com/ltcsuite/ltcd v0.0.0-20190101042124-f37f8bf35796/go.mod h1:3p7ZTf9V1sNPI5H8P3NkTFF4LuwMdPl2DodF60qAKqY= github.com/ltcsuite/ltcutil v0.0.0-20181217130922-17f3b04680b6/go.mod h1:8Vg/LTOO0KYa/vlHWJ6XZAevPQThGH5sufO0Hrou/lA= +github.com/machinebox/graphql v0.2.2 h1:dWKpJligYKhYKO5A2gvNhkJdQMNZeChZYyBbrZkBZfo= +github.com/machinebox/graphql v0.2.2/go.mod h1:F+kbVMHuwrQ5tYgU9JXlnskM8nOaFxCAEolaQybkjWA= github.com/magiconair/properties v1.7.6/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -721,6 +725,7 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5-0.20200615073812-232d8fc87f50/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= @@ -842,6 +847,7 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/net v0.0.0-20170915142106-8351a756f30f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -887,8 +893,9 @@ golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210913180222-943fd674d43e h1:+b/22bPvDYt4NPDcy4xAGCmON713ONAWFeY3Z7I3tR8= golang.org/x/net v0.0.0-20210913180222-943fd674d43e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f h1:OfiFi4JbukWwe3lzw+xunroH1mnC1e2Gy5cxNJApiSY= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -968,8 +975,10 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210915083310-ed5796bab164 h1:7ZDGnxgHAMw7thfC5bEos0RDAccZKxioiWBhfIe+tvw= golang.org/x/sys v0.0.0-20210915083310-ed5796bab164/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8 h1:OH54vjqzRWmbJ62fjuhxy7AxFFgoHN0/DPc/UrL8cAs= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -1052,8 +1061,9 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.7 h1:6j8CgantCy3yc8JGBqkDLMKWqZ0RDU2g1HVgacojGWQ= golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/tools v0.1.10 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/main_test.go b/main_test.go index 8b380b5..10f8438 100644 --- a/main_test.go +++ b/main_test.go @@ -453,14 +453,14 @@ func TestChannelAllowlist_CorrectKey(t *testing.T) { app := NewApp(ctx, client) Configuration.ChannelMode = "allowlist" - Configuration.ChannelAllowlist = []string{"6d792d7075626b65792d69732d766572792d6c6f6e672d666f722d7472696d6d696e672d7075626b6579"} + Configuration.ChannelAllowlist = []string{"03006fcf3312dae8d068ea297f58e2bd00ec1ffe214b793eda46966b6294a53ce6"} app.DispatchChannelAcceptor(ctx) // correct key: should be allowed client.channelAcceptorRequests <- &lnrpc.ChannelAcceptRequest{ - NodePubkey: []byte("my-pubkey-is-very-long-for-trimming-pubkey"), + NodePubkey: []byte("03006fcf3312dae8d068ea297f58e2bd00ec1ffe214b793eda46966b6294a53ce6"), FundingAmt: 1337000, PendingChanId: []byte("759495353533530113"), } @@ -468,15 +468,27 @@ func TestChannelAllowlist_CorrectKey(t *testing.T) { resp := <-client.channelAcceptorResponses require.Equal(t, resp.Accept, true) +} +func TestChannelAllowlist_WrongKey(t *testing.T) { + client := newLndclientMock() + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + app := NewApp(ctx, client) + + Configuration.ChannelMode = "allowlist" + Configuration.ChannelAllowlist = []string{"03006fcf3312dae8d068ea297f58e2bd00ec1ffe214b793eda46966b6294a53ce6"} + + app.DispatchChannelAcceptor(ctx) // wrong key: should be denied client.channelAcceptorRequests <- &lnrpc.ChannelAcceptRequest{ - NodePubkey: []byte("WRONG PUBKEY"), + NodePubkey: []byte("WRONG-KEY"), FundingAmt: 1337000, PendingChanId: []byte("759495353533530113"), } - resp = <-client.channelAcceptorResponses + resp := <-client.channelAcceptorResponses require.Equal(t, resp.Accept, false) } func TestChannelAllowlist_Wildcard(t *testing.T) { @@ -493,7 +505,7 @@ func TestChannelAllowlist_Wildcard(t *testing.T) { Configuration.ChannelAllowlist = []string{"*"} client.channelAcceptorRequests <- &lnrpc.ChannelAcceptRequest{ - NodePubkey: []byte("WRONG PUBKEY"), + NodePubkey: []byte("03006fcf3312dae8d068ea297f58e2bd00ec1ffe214b793eda46966b6294a53ce6"), FundingAmt: 1337000, PendingChanId: []byte("759495353533530113"), } @@ -510,14 +522,14 @@ func TestChannelDenylist_Match(t *testing.T) { app := NewApp(ctx, client) Configuration.ChannelMode = "denylist" - Configuration.ChannelDenylist = []string{"6d792d7075626b65792d69732d766572792d6c6f6e672d666f722d7472696d6d696e672d7075626b6579"} + Configuration.ChannelDenylist = []string{"03006fcf3312dae8d068ea297f58e2bd00ec1ffe214b793eda46966b6294a53ce6"} app.DispatchChannelAcceptor(ctx) // should be denied client.channelAcceptorRequests <- &lnrpc.ChannelAcceptRequest{ - NodePubkey: []byte("my-pubkey-is-very-long-for-trimming-pubkey"), + NodePubkey: []byte("03006fcf3312dae8d068ea297f58e2bd00ec1ffe214b793eda46966b6294a53ce6"), FundingAmt: 1337000, PendingChanId: []byte("759495353533530113"), } @@ -534,13 +546,13 @@ func TestChannelAllowlist_Match(t *testing.T) { app := NewApp(ctx, client) Configuration.ChannelMode = "allowlist" - Configuration.ChannelAllowlist = []string{"6d792d7075626b65792d69732d766572792d6c6f6e672d666f722d7472696d6d696e672d7075626b6579"} + Configuration.ChannelAllowlist = []string{"03006fcf3312dae8d068ea297f58e2bd00ec1ffe214b793eda46966b6294a53ce6"} app.DispatchChannelAcceptor(ctx) // should be allowed client.channelAcceptorRequests <- &lnrpc.ChannelAcceptRequest{ - NodePubkey: []byte("my-pubkey-is-very-long-for-trimming-pubkey"), + NodePubkey: []byte("03006fcf3312dae8d068ea297f58e2bd00ec1ffe214b793eda46966b6294a53ce6"), FundingAmt: 1337000, PendingChanId: []byte("759495353533530113"), } diff --git a/rules/ChannelAccept.js b/rules/ChannelAccept.js index 3b5e594..023ce90 100644 --- a/rules/ChannelAccept.js +++ b/rules/ChannelAccept.js @@ -1,2 +1,12 @@ -ChannelAccept.Event.FundingAmt >= 750000; - +if ( + ChannelAccept.Event.FundingAmt >= 750000 && + ChannelAccept.OneMl.LastUpdate > 1661227900 && + ChannelAccept.OneMl.Noderank.Availability > 100 && + ChannelAccept.Amboss.Socials.Info.Email + // ( + // ChannelAccept.Amboss.Socials.Info.Email.length > 0 || + // ChannelAccept.Amboss.Socials.Info.Twitter.length >0 || + // ChannelAccept.Amboss.Socials.Info.Telegram.length >0 + // ) + // ChannelAccept.Amboss.Amboss.IsPrime == false +) { true } else { false } diff --git a/rules/HtlcForward.js b/rules/HtlcForward.js index efa69bd..40e9a6d 100644 --- a/rules/HtlcForward.js +++ b/rules/HtlcForward.js @@ -1,2 +1,4 @@ -HtlcForward.Event.OutgoingAmountMsat >= 100000 +if ( + HtlcForward.Event.OutgoingAmountMsat >= 100000 +) { true } else { false } diff --git a/rules/rules.go b/rules/rules.go index ba0f086..6480cc8 100644 --- a/rules/rules.go +++ b/rules/rules.go @@ -2,11 +2,11 @@ package rules import ( "fmt" - "log" "os" "github.com/callebtc/electronwall/types" "github.com/dop251/goja" + log "github.com/sirupsen/logrus" ) func Apply(s interface{}, decision_chan chan bool) (accept bool, err error) { @@ -41,7 +41,7 @@ func Apply(s interface{}, decision_chan chan bool) (accept bool, err error) { // execute script v, err := vm.RunString(string(js_script)) if err != nil { - fmt.Print(err.Error()) + log.Errorf("JS error: %v", err) return }