Note: Generating split key does decrease speeds. If you can find someone offering the 16XX or 20XX series, it will probably be even better performance/$.

A trivial way to outsource these computations without decreasing speed is replacing G (the generator of the curve):

https://github.com/JeanLucPons/VanitySearch/blob/master/SECP256K1.cpp// Generator point and order

G.x.SetBase16("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798");

G.y.SetBase16("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8");

Let's do an example. I want to find 1TryMe prefix. I don't have enough resource. B will do the work for me.

First I generate a private key k':

$ hexdump -n 32 -e '8/4 "%08X"' /dev/urandom

B0F73D115572691C22B4D7AC5266A1D488E607323AABB35AB2896BE2B5204C91

then I compute the corresponding public key G' = k'*G:

961b9c7b6e08355e6d25924022df6d15c7da7af05ba7bb50f5b8d78a46378f0f 9377f60a859415663417ea79ed6ee83db70ea77bad8e1ad05662c699f4beec1c

and I send only the public key G' to B.

B replaces G with G':

// Generator point and order

G.x.SetBase16("961b9c7b6e08355e6d25924022df6d15c7da7af05ba7bb50f5b8d78a46378f0f");

G.y.SetBase16("9377f60a859415663417ea79ed6ee83db70ea77bad8e1ad05662c699f4beec1c");

B compiles and runs VanitySearch:

./VanitySearch -gpu 1TryMe

Pub Addr: 1TryMemMqFG1SWFXJkdCyXm6gFhgc6iMH

Prv Addr: 5JkNnhUQfAJmQpWHv9r9g4YM1SKs4roT5N1okKgrLj1BcoNSYUE

Prv Key : 0x7ddea4bdd3d14030094ddf5aa416b7e979fe5cce58802c1d0a272c1b5f4455ab

Check : 147homhkTC1xKQVvBjdiYB5Xw3tRg1n2RT

Check : 1TryMemMqFG1SWFXJkdCyXm6gFhgc6iMH (comp)

and he returns the private (partial) key 0x7ddea4bdd3d14030094ddf5aa416b7e979fe5cce58802c1d0a272c1b5f4455ab

to me.

Important: partial_k*G' = public key -> 1TryMemMqFG1SWFXJkdCyXm6gFhgc6iMH

but G' = k'*G then partial_k * k' * G = public key -> t1TryMemMqFG1SWFXJkdCyXm6gFhgc6iMH

then the real private_key is (partial_k * k') mod n

python

>>> n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141

>>> k = 0xB0F73D115572691C22B4D7AC5266A1D488E607323AABB35AB2896BE2B5204C91

>>> partial_k = 0x7ddea4bdd3d14030094ddf5aa416b7e979fe5cce58802c1d0a272c1b5f4455ab

>>>

>>> private_key = (partial_k * k) % n

>>> hex(private_key)

'0x7ad1451e53cfb77ccb6e15965fa2af303e762d3895b5508540deb5ff39e010f4'

0x7ad1451e53cfb77ccb6e15965fa2af303e762d3895b5508540deb5ff39e010f4.