Ich erhalte diesen Fehler, wenn ich versuche, eine Verbindung zum Websocket herzustellen
WebSocket-Verbindung zu „wss://ropsten.infura.io/ws“ fehlgeschlagen: Fehler beim WebSocket-Handshake: Nicht leerer „Sec-WebSocket-Protocol“-Header gesendet, aber keine Antwort erhalten
Code-Auszug
import web3 from 'web3';
var web3lib = new web3(
new web3.providers.WebsocketProvider('wss://ropsten.infura.io/ws'),
);
console.log(
'provider in web3 eth: ' + JSON.stringify(web3lib.currentProvider),
);
console.log('New block in web3 eth: ' + web3lib.blockNumber);
var subscription = web3lib.eth.subscribe('newBlockHeaders', function(
error,
result,
) {
if (!error)
console.log("output of web3 stream"+JSON.stringify(result));
else
console.log('Error of web3 stream ' + JSON.stringify(result));
});
Was mache ich hier falsch?
wurde auf https://github.com/ethereum/web3.js/issues/1559#issuecomment-412348642 behobenweb3@1.0.0-beta.36
Das funktioniert
#!/usr/bin/env node
const Web3 = require('web3');
const web3 = new Web3(new Web3.providers.WebsocketProvider('wss://mainnet.infura.io/ws'));
const subscription = web3.eth.subscribe('newBlockHeaders', (error, blockHeader) => {
if (error) return console.error(error);
console.log('Successfully subscribed!', blockHeader);
}).on('data', (blockHeader) => {
console.log('data: ', blockHeader);
});
// unsubscribes the subscription
subscription.unsubscribe((error, success) => {
if (error) return console.error(error);
console.log('Successfully unsubscribed!');
});
Nehmen Sie dieses Beispiel von https://github.com/egalano
https://github.com/INFURA/infura/issues/29#issuecomment-365128914
Es scheint, dass ein Wert des WebSocket-Anforderungsheaders ungültig ist.
Genauer gesagt, ein Wert von Sec-WebSocket-Protocol
ist undefined
.
Gemäß dem unten stehenden Github-Problem wurde das Problem von eingeführtweb3@1.0.0-beta.34
https://github.com/ethereum/web3.js/issues/1559
Ich habe bestätigt, web3@1.0.0-beta.35
dass das Problem in meiner Umgebung noch nicht behoben wurde. Daher web3@1.0.0-beta.33
ist ein Downgrade auf erforderlich, wenn Sie in diesem Moment WebSocket verwenden.
Verwenden Sie Ihre Infrua-ID, um MYID zu ersetzen:
client, err := ethclient.Dial("wss://mainnet.infura.io/ws/v3/MYID")
if err != nil {
log.Fatal(err)
}
headers := make(chan *types.Header)
sub, err := client.SubscribeNewHead(context.Background(), headers)
if err != nil {
log.Fatal(err)
}
for {
select {
case err := <-sub.Err():
log.Fatal(err)
case header := <-headers:
fmt.Println(header.Hash().Hex()) // 0xbc10defa8dda384c96a17640d84de5578804945d347072e091b4e5f390ddea7f
block, err := client.BlockByHash(context.Background(), header.Hash())
if err != nil {
log.Fatal(err)
}
log.Printf("TX:%s", block.Hash().Hex()) // 0xbc10defa8dda384c96a17640d84de5578804945d347072e091b4e5f390ddea7f
log.Printf("Height:%d", block.Number().Uint64()) // 3477413
log.Printf("Time:%d", block.Time()) // 1529525947
log.Println(block.Nonce()) // 130524141876765836
log.Printf("#:%d", len(block.Transactions())) // 7
}
}
Sundar
Daniel Luca CleanUnicorn
Sundar
Daniel Luca CleanUnicorn
web3@1.0.0-beta.34
Gus
Matt Swezy
...beta.36